屬性聲明
- 屬性使用標准的C++變量語法聲明,前面用UPROPERTY宏來定義屬性元數據和變量說明符。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
-
示例:位掩碼
UENUM(BlueprintType)
enum class EColorBits1 :uint8
{
ECB_Red,
ECB_Green,
ECB_Blue,
};
//使用"bitflags"元標記來創建UENUM,實際使用似乎沒差別
UENUM(BlueprintType, Meta = (Bitflags))
enum class EColorBits2 :uint8
{
ECB_Red,
ECB_Green,
ECB_Blue,
};
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
EColorBits1 ColorBits1;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
EColorBits2 ColorBits2;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits1"))
int32 ColorFlags3;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits2"))
int32 ColorFlags4;
在上述示例中, ECB_Red 值為0,表示它被選中時將激活位0(將ColorFlags增加1)。ECB_Green對應於位1(將ColorFlags增加2),ECB_Blue 對應於位2(將ColorFlags增加4)。
屬性說明符
作用
- 聲明屬性時,屬性說明符 可被添加到聲明,以控制屬性與引擎和編輯器諸多方面的相處方式。
常用說明符
VisibleDefaultsOnly
// 僅在 Class Defaults 可見
UPROPERTY(VisibleDefaultsOnly)
int32 VisibleDefaultsOnlyInt;
VisibleInstanceOnly
// 僅在實例化 Detail 可見
UPROPERTY(VisibleInstanceOnly)
FVector VisibleInstanceOnlyVector;
VisibleAnywhere
//Class Defaults 和 實例化 Detail 可見
UPROPERTY(VisibleAnywhere)
FString VisibleAnywhereString;
EditDefaultsOnly
//僅在 Class Defaults 可編輯
UPROPERTY(EditDefaultsOnly)
int32 EditDefaultsOnlyInt;
EditInstanceOnly
//僅在實例化 Detail 可編輯
UPROPERTY(EditInstanceOnly)
FVector EditInstanceOnlyVector;
EditAnywhere
//Class Defaults 和 實例化 Detail 可編輯
UPROPERTY(EditAnywhere)
FString EditAnywhereString;
BlueprintReadOnly
//Variables 只讀
UPROPERTY(BlueprintReadOnly)
int32 intValue_BlueprintReadOnly;
BlueprintReadWrite
//Variables 可讀寫
UPROPERTY(BlueprintReadWrite)
int32 intValue_BlueprintReadWrite;
Category 類別
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TopCategory")
int32 intValue1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TopCategory|SubCategory")
int32 intValue2;
BlueprintAssignable
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FNotifyPawnChange, float, PawnHpPercent, float, PawnPhysicalShieldPercent, float, PawnMageShieldPercent);
//藍圖中可綁定委托
UPROPERTY(BlueprintAssignable)
FNotifyPawnChange NotifyPawnChange;
元數據說明符 meta
作用
聲明類、接口、結構體、列舉、列舉值、函數,或屬性時,可添加 元數據說明符 來控制其與引擎和編輯器各方面的相處方式。每一種類型的數據結構或成員都有自己的元數據說明符列表
常見說明符
DisplayName 別名
- 可以便於藍圖變量搜索,如果變量名不好記的話
EditCondition 條件可編輯
- 支持bool、比較等條件判斷
UPROPERTY(EditAnywhere,BlueprintReadWrite, meta = (DisplayName="UseOffset1、2 標志位") )
bool bUseOffset;
UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionValue 控制 offset3"))
int32 ContitionValue;
UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionColorBits 控制 offset4"))
EColorBits1 ContitionColorBits;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "bUseOffset"))
float Offset1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "!bUseOffset"))
float Offset2;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionValue>0"))
float Offset3;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionColorBits==EColorBits1::ECB_Green"))
float Offset4;
BindWidget 和 UMG 同名同類型控件綁定
UPROPERTY(EditAnywhere, meta = (BindWidget))
UImage* TCanvas;
UPROPERTY(EditAnywhere, BlueprintReadWrite , meta = (BindWidget))
UButton* Btn_Mass;
UMETA 擴展宏
- cpp meta里的中文在藍圖經常會亂碼
- 解決方法一:高級保存選擇 Unicode 65001
- 解決辦法二:使用UMETA中的DisplayName
- 可用於Enum的元素別名
- 可用於結構體的元素別名
- 可用於Datatable的別名
UPROPERTY(EditAnywhere)
FName ChineseName UMETA(DisplayName="中文名");
UPROPERTY(EditAnywhere)
float Weight UMETA(DisplayName = "體重") = 65.0f;
UPROPERTY(EditAnywhere)
EColorBits1 FavoriteColorBits UMETA(DisplayName = "最喜歡的顏色")=EColorBits1::ECB_Blue;