UnrealEngine4 最初にBluePrintとのリフレクション部分を調べる part2 構造体、enum、メンバ変数
最初に
プロジェクトは BluePrintのThirdPersonExanmple プロジェクト名:BPTest C++クラス: MyActor 派生したBluePrintクラス:BP_MyActor
を作成する 作成したクラスを元にリフレクションを調査
構造体
構造体をBluePrintと両方で使いたい場合は、基底クラスのC++側で リフレクション付けて定義します
コード
Class宣言の前に
USTRUCT(BlueprintType) struct BPSAMPLE_API FHogeStruct { GENERATED_USTRUCT_BODY() public: UPROPERTY() float x; UPROPERTY(BlueprintReadOnly) float y; UPROPERTY(BlueprintReadWrite) float z; };
名前
今回の構造体名は FHogeStruct 構造体は頭に Fのプリフィックスを付けねば認識してくれないのは Unrealの仕様
USTRUCT()
BluePrintに公開するときに必要 ただし、これだけではガーベージコレクションに入らないので、メンバ1つずつに対して UPROPERTY設定必要
UPROPERTY()
メンバそれぞれに対して、BluePrintにリフレクションするパラメータを設定する 今回は3種類書いてみた パラメーター無し、BlueprintReadOnly、BlueprintReadWrite 結果から言うと パラメータ無しだと Blueprintに公開されない BlueprintReadOnlyだと 書き込み不能 BlueprintReadWrite だと読み書き可能 みた通りの挙動
BluePrintでの結果
BP_MyActorのブループリントを開き、HogeStructのノードを開く
見て分かる通り、IN (書き込み)は Zのみ、OUT(読み込み)はYとZで、Xは読み書きどちらも不能
これで 構造体をBluePrintとC++で使えるようになった
Enum
EnumをBluePrintと両方で使いたい場合は、基底クラスのC++側で リフレクション付けて定義します
コード
Class宣言の前に
UENUM(BlueprintType) enum class EHogeEnum : uint8 { HOGE, HOGE2, HOGE3 };
名前
今回の構造体名は EHogeEnum Enumは頭に Eのプリフィックスを付けねば認識してくれないのは Unrealの仕様 また、内部表現は8ビット固定
UENUM()
BluePrintに公開するときに必要
BluePrintでの結果
BP_MyActorのブループリントを開き、HogeEnumのノードを開く
これで EnumをBluePrintとC++で使えるようになった
メンバ変数
メンバ変数をBluePrintに公開するには、基底クラスのC++側で リフレクション付けて定義します
コード
Class
UCLASS(Blueprintable) class BPSAMPLE_API AMyActor : public AActor { GENERATED_BODY() private: // UPROPERTY(BlueprintReadWrite, Category = "MyTest") float private_; // privateではアクセスを書くとコンパイルエラー UPROPERTY() float private_; protected: UPROPERTY(BlueprintReadOnly, Category = "MyTest") float protected_; public: UPROPERTY(BlueprintReadWrite, Category = "MyTest") float public_; // Sets default values for this actor's properties AMyActor(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void Tick( float DeltaSeconds ) override; };
UPROPERTY()
構造体の時と同じく、BlueprintReadOnly、BlueprintReadWrite を選べる また、Categoryをつけると、BluePrintでノードを検索するときに カテゴリー名で検索できるので便利 Privateの場合は BluePrintから呼び出せないため、それらのパラメータを付けることは不可能
BluePrintでの結果
private 変数はアクセス不能 protected 変数はアクセス可能 public_ 変数はアクセス可能
関数については次!