← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-10

使用 DataTable 和 UObject 擴展您的技能

如何將數字數據與複雜的噱頭分開

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

如果您在 C++ 建構函式中編寫每個單元的所有統計資料和特徵,則每次變更平衡時都必須重建它們。 ProjectTB 將數位資料與複雜行為分開。

簡單的數字就是DataTable

可以用行和列表示的值,例如按等級劃分的體力、攻擊力和所需經驗,都放置在資料表中。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Progression")
TObjectPtr<UDataTable> UnitProgressionTable;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Progression")
TObjectPtr<UDataTable> UnitTraitTable;

即使規劃值發生變化,C++ 邏輯也可以保持不變。 但是,如果您嘗試僅使用名稱字串和數字來表達所有操作,則條件語句會變得很大。

複雜的噱頭是 UObject

TB 計劃UTBUnitSkill班級UTBUnitTrait是一個可替換的UObject。

UFUNCTION(BlueprintNativeEvent)
bool Activate(ATBUnitBase* TargetUnit, ATBHexTile* TargetTile);

UFUNCTION(BlueprintNativeEvent)
int32 ModifyOutgoingDamage(
    ATBUnitBase* TargetUnit,
    int32 Damage
) const;

對於每個屬性,傷害、恢復、動作開始和結束以及殺死事件之前和之後的事件都可以被覆蓋。

數據表TraitClass記錄要建立的 UObject 類別。

DataTable
名稱/描述/數字/特徵類別
                    ↓
UTBUnitTrait 衍生類
實際噱頭執行

DataTable 管理數據,UObject 封裝行為。 透過混合這兩種方法,不需要為簡單的數值特徵建立類別,也不需要將複雜的特徵放在巨大的 switch 語句中。