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