BLOGブログ

2016.07.23UE4UE/ C++

[UE4] BPノードのOutputの型を動的に変更するためのmeta情報

改訂バージョン: Unreal Engine 4.21

先日の出張ヒストリアにお越しいただいた方はお疲れ様でした。
ご好評頂いているようで何よりです。
さて、今回はBPノードのInput/Outputの型に関する細かいテクニックのお話です。

 

 

BPノードのInput/Outputの型に関して

BPノードのInput/Outputは通常だと明示的に型が設定されており、使い方によってそれらの型情報等が変わることはありません。
それでどういった事が起こるかというと、例えば以下の様なケースです。

 

 

こちらはレベル上に存在するアクターの中からクラス指定で一つだけ取得するというBPノードになります。
一見問題無さそうに見えますが、これを使用する際には以下の様な処理を書かなくてはいけません。

 

 

明示的にクラスを指定してノードを実行したにも関わらず、Outputの型が汎用的なActorのリファレンスとなってしまっているため、これを使用するためにCastを挟む必要が出てきます。
わざわざこれを毎回挟む必要があるのは非常に面倒です。
しかし、実はC++定義のBPノードであればこの問題を回避できます。

 

 

Outputの型を動的変更するためのmeta情報

C++でBPノードとして公開する関数を作成する場合はmeta情報を定義できます。
このmeta情報には様々なものがありますが、その中に DeterminesOutputType DynamicOutputParam というものが存在します。

DeterminesOutputType Outputの型を決定するために参照するInputの名前
DynamicOutputParam 動的変更するOutputの名前

 

これらに従い、以下の様な形で記述します。

 

 

今回は DeterminesOutputType として ActorClass を、DynamicOutputParam として OutActor を指定しています。
BPで定義したものと処理の内容的には違いはありません。
こちらをBPで使用する際は以下の様に書けます。

 

 

OutActorの型がActorのリファレンスではなく、Inputに指定したクラスのリファレンスになっていることがわかります。
これによりCastは必要無くなりました。
ちょっとした小ネタでしたが以上です。