UEC++は根幹はC++なのでクラス内に通常と同じようにインスタンス変数を宣言できる。

UCLASS()
class ASomeActor : public AACtor
{
	GENERATED_BODY()
	public:
		FVector MyPosition;
	
	private:
		AActor* RefActor;
		
}

しかしこのように宣言してしまうとUEの強力なガベージコレクションの恩恵を受けることができないので次のようにマクロをつけて宣言するのが一般的である。

UCLASS()
class AFixedActor : public AActor
{
	GENERATED_BODY()
	public:
		UPROPERTY()//なにも指定しない場合はBlueprint側からは見えない変数となる(GCを使うメリットのみうける)
		FVector MyPosition;//FVectorは構造体なので値で扱う
	
	private:
		UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "UECppBook")//BPからのアクセス制限、編集できる場所、カテゴリなどを指定できる
		AActor* RefActor;//AActorはクラスなのでポインタで扱う
}

プロパティの初期化

プリミティブ型は宣言時に初期化も同時にできる(定義できる)が、他の型はコンストラクタ内で初期化しなければならない。

FStructInitializeProperty::FStructInitializeProperty()
{
	//プリミティブ型以外の型はコンストラクタ上で初期化する
	MyPosition = FVector(1, 2, 3);
}

プロパティ属性の例

UPROPERTY()で与えられる属性の例を示す

	//BP上からのI/Oが可能
	UPROPERTY(BlueprintReadWrite, Category = "UECppBook")
	float BprwFloat = 5.f;
	//BP上からとエディタ上からのI/Oが可能
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	FVector MyPosition;
	//メタ情報としてエディタ上での表記変更、最大値最小値、UIスライダーで変更できる値の範囲を指定できる
	UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "UECppBook", meta = (DisplayName = "4BitInteger", ClampMin = 0, ClampMax = 125, UIMin = 0, UIMax = 125))
	uint8 Bit4Int = 0;

プロパティの制限

プロパティ(インスタンス変数)として利用できる型として構造体、列挙型、クラス、プリミティブがある。

プリミティブには以下のものがある。

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	int8 TestInt8 = 50;//int8
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	int16 TestInt16 = 50;//int16
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	int32 TestInt32 = 50;//int32
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	int64 TestInt64 = 50;//int64
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	uint8 TestUInt8 = 50;//uint8
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	uint16 TestUInt16 = 50;//uint16
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	uint32 TestUInt32 = 50;//uint32
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	uint64 TestUInt64 = 50;//uint64
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	double TestDouble = 5.0;//double
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	float TestFloat = 5.f;//float
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "UECppBook")
	bool bTestBool = false;//bool

しかし上のプリミティブ型のうち次のものはブループリントからのアクセスができないので注意