UE4:C++Actorから色々な型の変数をUPROPERTYしてみた。
エディタやブループリントからC++で作ったActorのメンバー変数にアクセスするには、UPROPERTYマクロを指定する必要があるらしいので、色々な型の変数をUPROPERTYしてみました。
その時、わかったことがあるので記します。
- とりあえずなら、UPROPERTYは、UPROPERTY(EditAnywhere, BlueprintReadWrite)にしておけば、エディターとBPからアクセスできる。
- 整数はuin8とInt32以外は、エディターとBPからアクセスできないみたい。(コンパイルエラーにはならない)
- 浮動小数はdoubleはだめで、floatのみエディターとBPからアクセスできるみたい。コンパイルエラーにはならない)
- enum は UENUM()マクロ と TEnumAsByteテンプレートを使う必要がある。ので記述がちょっと面倒。
- 配列はTArrayテンプレートをつかえばいい。
- UPROPERTYマクロの引数Categoryは取り合えずは必要ないけど、変数が増えてきたら、分類するのに便利。名前は自由につけられる。
- 変数のデフォルト値の設定は、クラスのコンストラクタで設定すれば、それがデフォルト値になる。
//enumの上にUENUM()をかかないと、エンジンが認識しないです。 UENUM() enum ETestEnumType{ TypeA, TypeB, TypeC, TypeD, }; : : // 整数はuin8とInt32以外は、エディターとBPからアクセスできないみたい。 UPROPERTY(EditAnywhere, BlueprintReadWrite,Category=Integer) uint8 uint8Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) uint16 uint16Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) uint32 uint32Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) uint64 uint64Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) int8 int8Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) int16 int16Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) int32 int32Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Integer) int64 int64Value; //浮動小数はfloatのみエディターとBPからアクセスできるみたい。 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Float) float floatValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Float) double doubleValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Boolean) bool bBoolValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Boolean) uint32 bBFBoolValue:1; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = String) FString FStringValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = String) FName FNameValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = String) FText FTextValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Object) AActor* ActorValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Object) UStaticMeshComponent* StaticMeshCompValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Etc) FVector FVectorValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Etc) FRotator FRotatorValue; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Etc) FColor FColorValue; //enum は TEnumAsByteというテンプレを使う必要がある。 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Etc) TEnumAsByte<ETestEnumType> ENumValue; //配列はTArrayテンプレートをつかえばいい。 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Etc) TArray<int32> arrayValue;
わかれば、なんてことないけど、Unityでクラスの変数をエディターに公開するより、癖がありました。
公式ドキュメントのページには、UPROPERTYの言語説明のページはあるけど、使い方の説明が足りない気がします。
参考