ブループリント関数ライブラリーなどを使う際に、見慣れない「World Context Object」 に遭遇することがあるかと思います。正体がよくわからなかったので少し調べてみました。
- 参考サイトによる解説
- 関数ライブラリーと「World Context Object」の関係
- WorldContextピンが表示される場合、されない場合の違い
- World Context Object にどんな値が入っているか検証
参考サイトによる解説
「WorldContextObject 」についての解説記事
上記サイトでは、以下のように説明されています。
WorldContextObject は GetWorld()が実装されたUObject、つまり World への参照アクセスを持ったオブジェクトのことです。
Worldとは?
Worldについて調べてもパッと出でてきませんでした。
Levelごとにワールド設定があったり、Open Level(by Object Reference) でのLevelピンは、World型だったりしますし、大まかにはLevelのことかもしれません???
関数ライブラリーと「World Context Object」の関係
引用(機械翻訳)
例えば、あるタグを持つすべてのアクタを取得する場合、関数はそれらのアクタが存在するワールドや、delta timeなどを知っておく必要があります。
Get Actor of Class
など、ActorがどこのWorldに所属しているか知らないことには取得できなかったりするみたいですね。
WorldContextピンが表示される場合、されない場合の違い
Get Actor of Class
などを使う際、ActorBP内で使用する場合、「World Context Object」ピンは表示されません。
しかし、関数ライブラリー内では表示されます。
そちらについてはこちらの説明を読むと分かりやすいです。
引用:結論部分の記述
引用元に関して、C++で関数を作成する際のお話なのですが、C++がわからなくても参考になります。
アクターは通常自分自身が存在するワールドで関数を実行するのでWorldContextで指定したパラメータのピンは非表示になります。アクターではない BlueprintFunctionLibraryなどは実行されるワールドが決まっていないのでピンが表示されます。
つまりWorldContextピンが表示される理由は、「実行されるワールドが決まっていない」からのようですね。
World Context Object にどんな値が入っているか検証
関数ライブラリー内でWorld ContextをPrintStringしてみる
関数ライブラリー内で右クリックし、「World Context」と入力すると、「Get World Context」という変数を呼び出すことができます。
こいつをPrintStringに繋げれば、関数を呼び出した際に「World Context」にどんな値が入っているかわかります。
PlayerControllerから呼び出した場合
ゲームをプレイしてみると、関数の呼び出し元であるPlayerControllerが出力されました。ゲーム中に生成したWidgetから呼び出した場合
「World Context」には呼び出し元のWidgetが入っていました。
「World Context」には呼び出し元のオブジェクト(World への参照を持つ)の情報が入っているようですね。
つまり関数側で呼び出し元を把握できる?
「World Context」変数をCastなどに繋げれば、関数ライブラリー内で呼び出し元がPlayerControllerなのかの判断もできますね!
どのオブジェクトから呼ばれたのか把握できるということは、アイディア次第では何かに使えるかもしれません。