【UE4 C++ 基礎知識】<1> UPROPERTY宏、屬性說明符、元數據說明符


屬性聲明

  • 屬性使用標准的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;

image

在上述示例中, ECB_Red 值為0,表示它被選中時將激活位0(將ColorFlags增加1)。ECB_Green對應於位1(將ColorFlags增加2),ECB_Blue 對應於位2(將ColorFlags增加4)。

屬性說明符

作用

  • 聲明屬性時,屬性說明符 可被添加到聲明,以控制屬性與引擎和編輯器諸多方面的相處方式。

常用說明符

VisibleDefaultsOnly

// 僅在 Class Defaults 可見
UPROPERTY(VisibleDefaultsOnly)
	int32 VisibleDefaultsOnlyInt;

image

VisibleInstanceOnly

// 僅在實例化 Detail 可見
UPROPERTY(VisibleInstanceOnly)
	FVector VisibleInstanceOnlyVector;

image

VisibleAnywhere

//Class Defaults 和 實例化 Detail 可見
UPROPERTY(VisibleAnywhere)
	FString VisibleAnywhereString;

image

EditDefaultsOnly

//僅在 Class Defaults 可編輯
UPROPERTY(EditDefaultsOnly)
	int32 EditDefaultsOnlyInt;

image

EditInstanceOnly

//僅在實例化 Detail 可編輯
UPROPERTY(EditInstanceOnly)
	FVector EditInstanceOnlyVector;

image

EditAnywhere

//Class Defaults 和 實例化 Detail 可編輯
UPROPERTY(EditAnywhere)
	FString EditAnywhereString;

image

BlueprintReadOnly

//Variables 只讀
UPROPERTY(BlueprintReadOnly)
	int32 intValue_BlueprintReadOnly;

image

BlueprintReadWrite

//Variables 可讀寫
UPROPERTY(BlueprintReadWrite)
	int32 intValue_BlueprintReadWrite;

image

Category 類別

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TopCategory")
	int32 intValue1;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TopCategory|SubCategory")
	int32 intValue2;

image

BlueprintAssignable

DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FNotifyPawnChange, float, PawnHpPercent, float, PawnPhysicalShieldPercent, float, PawnMageShieldPercent);

//藍圖中可綁定委托
UPROPERTY(BlueprintAssignable)
	FNotifyPawnChange NotifyPawnChange;

image

元數據說明符 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;

image

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;

image

參考

UPROPERTY


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM