ヒマがあるならゲームつくってね

こんなとこ見てないでゲームをつくろう

UE4:C++Actorから色々な型の変数をUPROPERTYしてみた。

エディタやブループリントからC++で作ったActorのメンバー変数にアクセスするには、UPROPERTYマクロを指定する必要があるらしいので、色々な型の変数をUPROPERTYしてみました。
その時、わかったことがあるので記します。

  1. とりあえずなら、UPROPERTYは、UPROPERTY(EditAnywhere, BlueprintReadWrite)にしておけば、エディターとBPからアクセスできる。
  2. 整数はuin8とInt32以外は、エディターとBPからアクセスできないみたい。(コンパイルエラーにはならない)
  3. 浮動小数はdoubleはだめで、floatのみエディターとBPからアクセスできるみたい。コンパイルエラーにはならない)
  4. enum は UENUM()マクロ と TEnumAsByteテンプレートを使う必要がある。ので記述がちょっと面倒。
  5. 配列はTArrayテンプレートをつかえばいい。
  6. UPROPERTYマクロの引数Categoryは取り合えずは必要ないけど、変数が増えてきたら、分類するのに便利。名前は自由につけられる。
  7. 変数のデフォルト値の設定は、クラスのコンストラクタで設定すれば、それがデフォルト値になる。
//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;


f:id:siu3:20150516163055p:plain


わかれば、なんてことないけど、Unityでクラスの変数をエディターに公開するより、癖がありました。
公式ドキュメントのページには、UPROPERTYの言語説明のページはあるけど、使い方の説明が足りない気がします。



参考