#本記事について
BlueprintFunctionLibrary について、引数と返り値をどう記述すればどういう入出力の Blueprint ノードが出来上がるのかをまとめたものです。
主に筆者個人用です。
記述できる型は直型か参照型のみで、ポインタ型を記述するとビルドエラーになります。
Blueprint 上でポインタを扱えないためだと思われます。
また、関数の引数名を「ReturnValue」(大文字小文字問わず) とした場合もビルドエラーになります。
ノード化される際、内部で定義している名称と衝突してしまうようです。
(retval などなら OK)
#実例
##基本
BlueprintCallable 設定の関数のみとしています。
それ以外の設定は探せば出てくるので……
関数は宣言のみ記載しています(実装自体は空っぽです)。
記述 | 結果 |
---|---|
void ( void ) |
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnVoidArgFunc();
何も入出力しないやつです。
作り方系のドキュメントに多い。
##プリミティヴ型、引数の場合
記述 | 結果 |
---|---|
void ( int ) | |
void ( const int ) | |
void ( int & ) | |
void ( const int & ) |
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnIntArgFunc( int32 Value );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnConstIntArgFunc( const int32 Value );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnRefIntArgFunc( int32 & Value );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnConstRefIntArgFunc( const int32 & Value );
const 無し参照のみ出力扱いになります。
BP は返り値が複数存在可能なのはこのため(?)
##プリミティヴ型、返り値の場合
記述 | 結果 |
---|---|
int ( void ) | |
const int ( void ) | |
int & ( void ) | |
const int & ( void ) |
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static int32 IntReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static const int32 ConstIntReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static int32 & RefIntReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static const int32 & ConstRefIntReturnVoidArgFunc();
返り値はすべて出力扱いになるようです。
##複合型、引数の場合
FParameter は 別記事 内で作成していた USTRUCT になります。
記述 | 結果 |
---|---|
void ( FParameter ) | |
void ( const FParameter ) | |
void ( FParameter & ) | |
void ( const FParameter & ) |
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnParamArgFunc( FParameter Param );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnConstParamArgFunc( const FParameter Param );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnRefParamArgFunc( FParameter & Param );
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static void VoidReturnConstRefParamArgFunc( const FParameter & Param );
プリミティヴ型のそれと変わらないようです。
##複合型、返り値の場合
記述 | 結果 |
---|---|
FParameter ( void ) | |
const FParameter ( void ) | |
FParameter & ( void ) | |
const FParameter & ( void ) |
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static FParameter ParamReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static const FParameter ConstParamReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static FParameter & RefParamReturnVoidArgFunc();
UFUNCTION( BlueprintCallable, Category = "MyPlugin Sample Func" )
static const FParameter & ConstRefParamReturnVoidArgFunc();
こちらもプリミティヴ型と変わらずですが、複合型の値渡しはさすがにやめたほうがいいので上2つはナシ……
#まとめ
Blueprint ノードを C++ で組むにあたって、記述によって入出力が異なるためすべて列挙してみました。
引数では const 無し参照型のみ出力ピンとなります。
処理自体の成功失敗判定を bool や errno_t 的な返り値に統一し、処理結果を受け取るのを const 無し参照型とするのがよいかもしれません。