BLOGブログ

2021.03.17UE4UE/ C++UE/ Blueprint

[UE4] 非アクタ/WidgetのBlueprintでWorldContextを要求する関数を呼び出す

 

執筆バージョン: Unreal Engine 4.26

UObjectをベースとしたBlueprintでは、GetAllActorsOfClass等のWorldContextを要求する関数群を用いることができません。

UObjectを直接継承したBlueprintのグラフ上でGetAllActorsOfClassを使おうとすると下のように見つからず、使用できません。

fig 01. UObjectを継承したBlueprintClassの場合

 

こういった関数を使用するにはC++でUObjectを継承したベースクラスを作成し、それについて

  1. クラス属性にShowWorldContextPinを指定する
  2. GetWorld()関数をオーバーライドする

のいずれかが必要です。

 

1.については別の記事(ここ)にて触れられています。WorldContextがピンとして追加された上で使用可能になります。

2.の場合、アクター等の場合と同様に使えるようになります(WorldContextにGetWorld()の結果が自動的に割り当てられる)。

fig 02. GetWorldをオーバーライドしたベースクラスを用いた場合

fig 03.  ノードも普通に配置されます

 

注意:

ここで用いたベースクラスの定義はこのようになっています。

GetWorldの中で単に return null としていますが、このままではWorldContextの使用箇所を実行時にWarningが出力され、かつ動作しません。

Actorか何かに対するGetWorld()の結果を戻す等の実装が必要です。