219 字
1 分鐘
UPROPERTY / UFUNCTION 常用標記速查
為什麼需要反射標記
UE 的反射系統(UHT)會掃描 UPROPERTY、UFUNCTION 等巨集,產生序列化、GC、Blueprint 曝露所需的程式碼。沒加 UPROPERTY 的 UObject* 指標不會被 GC 追蹤,物件可能被回收而留下懸空指標。
UPROPERTY 常用組合
UCLASS()class MYGAME_API AMyCharacter : public ACharacter{ GENERATED_BODY()
public: // 只能在 Class Defaults 編輯,Blueprint 可讀 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Combat") float MaxHealth = 100.f;
// 場景中每個 Instance 可個別調整 UPROPERTY(EditInstanceOnly, Category = "Combat") TObjectPtr<AActor> PatrolTarget;
// 執行期狀態,Blueprint 可讀寫,不出現在 Details 面板 UPROPERTY(Transient, BlueprintReadWrite, Category = "State") bool bIsStunned = false;};| 標記 | 作用 |
|---|---|
EditAnywhere | Defaults 與 Instance 都能編輯 |
EditDefaultsOnly | 只能在 Blueprint Class Defaults 編輯 |
VisibleAnywhere | 只顯示、不可編輯(常用於 Component 指標) |
BlueprintReadOnly / BlueprintReadWrite | Blueprint Graph 中的存取權限 |
Transient | 不序列化,存檔與複製 Asset 時不保留 |
Replicated / ReplicatedUsing=OnRep_X | 網路複製 |
TIPComponent 指標通常用
VisibleAnywhere, BlueprintReadOnly:可以在 Details 調整 Component 內的屬性,但不會把指標本身換掉。
UFUNCTION 常用組合
// Blueprint 可呼叫,有執行腳位UFUNCTION(BlueprintCallable, Category = "Combat")void ApplyDamage(float Amount);
// 純函式,無執行腳位,不應有副作用UFUNCTION(BlueprintPure, Category = "Combat")float GetHealthPercent() const;
// C++ 宣告、Blueprint 實作UFUNCTION(BlueprintImplementableEvent)void OnDeath();
// C++ 提供預設實作,Blueprint 可覆寫(實作寫在 OnHit_Implementation)UFUNCTION(BlueprintNativeEvent)void OnHit(const FHitResult& Hit);WARNING
BlueprintNativeEvent的 C++ 實作函式名稱必須是函式名_Implementation。呼叫時要呼叫原名稱(介面則用Execute_),不要直接呼叫_Implementation,否則會跳過 Blueprint 覆寫。
分享
如果這篇文章對你有幫助,歡迎分享給更多人!
UPROPERTY / UFUNCTION 常用標記速查
https://spartan117.cc/posts/ue-cpp/uproperty-cheatsheet/ 部分資訊可能已經過時