UnrealEngine4 最初にBluePrintとのリフレクション部分を調べる part3 メソッド
最初に
プロジェクトは BluePrintのThirdPersonExanmple プロジェクト名:BPTest C++クラス: MyActor 派生したBluePrintクラス:BP_MyActor
前回、構造体、Enum、メンバ変数のリフレクションを調べたので 今回は関数のリフレクション
基本的にはリフレクション入門はこれで終わりかな?
関数
関数のリフレクションは、UFUNCTIONを使うが この時のパラメータにより挙動が大きく異なるので よく使われるものをのせる
パラメータ一覧
下記をみるとよい
パラメータ無し
UFUNCTION(Category = "MyFunc") virtual void FuncNone() {}; UFUNCTION(Category = "MyFunc") virtual void FuncNone2(int n) {}; UFUNCTION(Category = "MyFunc") virtual int FuncNone3(int n) { return 1; };
パラメータを付けない場合は、BluePrintと繋がることはない だが、後に出てくる レプリケーション等のUnrealEngineで使う関数には指定する必要がある
BluePrintCallable
UFUNCTION(BluePrintCallable, Category="MyFunc") virtual void FuncCallable() {}; UFUNCTION(BluePrintCallable, Category = "MyFunc") virtual void FuncCallable2(int n) {}; UFUNCTION(BluePrintCallable, Category = "MyFunc") virtual int FuncCallable3(int n) { return 1; };
BluePrintからC++のコードを実行する際に使う、最も多い使い方 基本的にUnrealではC++のクラスを継承しBluePrintを作る BluePrintで関数を Override可能
BlueprintImplementableEvent
UFUNCTION(BlueprintImplementableEvent, Category = "MyFunc") void FuncImplementableEvent() ; UFUNCTION(BlueprintImplementableEvent, Category = "MyFunc") void FuncImplementableEvent2(int n); UFUNCTION(BlueprintImplementableEvent, Category = "MyFunc") int FuncImplementableEvent3(int n);
C++からBluePrintの関数を呼ぶための仕組み 名前から推測するに イベントのような形で実行するのだろう 実際にBluePrintでもイベントとして表示される
virtual不可能&C++側で関数をImplement不可能 関数定義だけ用意し、C++からこのコードを呼べば、BluePrintで定義した関数が呼べる イベントなので 引数は取れるが戻り値は返せない コンパイルエラーにはならないが、戻り値をつけるとBluePrintから見えなくなる
BlueprintPure
// UFUNCTION(BlueprintPure, Category = "MyFunc") // virtual void FuncPure(){}; // UFUNCTION(BlueprintPure, Category = "MyFunc") // void FuncPure2(int n) {}; UFUNCTION(BlueprintPure, Category = "MyFunc") virtual int FuncPure3(int n) { return 1; };
ヘルプによると 所有するオブジェクトに影響を与えることなく・・・ らしく、戻り値がなければダメのようだ
結果
パラメータ無しはBluePrintに表示されない ImplementableEventは イベントとして表示。ただし戻り値を設定すると表示されない Callableは実行品が両端についた通常の関数 Pureは実行ピンのない、値をかえすだけのもの
これでBluePrintとのリフレクションの基礎は一通りおわった