Erweitern Sie Ihre Fähigkeiten mit DataTable und UObject
Wie man numerische Daten von komplexen Spielereien trennt
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Wenn Sie alle Statistiken und Eigenschaften für jede Einheit in einen C++-Konstruktor schreiben, müssen Sie sie jedes Mal neu erstellen, wenn Sie die Bilanz ändern. ProjectTB trennt numerische Daten von komplexem Verhalten.
Einfache Zahlen sind DataTable
Werte, die in Zeilen und Spalten ausgedrückt werden können, wie z. B. körperliche Stärke nach Level, Angriffskraft und erforderliche Erfahrung, werden in die DataTable eingefügt.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Progression")
TObjectPtr<UDataTable> UnitProgressionTable;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Progression")
TObjectPtr<UDataTable> UnitTraitTable;
Auch wenn sich Planungswerte ändern, kann die C++-Logik gleich bleiben. Wenn Sie jedoch versuchen, alle Aktionen nur mit Namenszeichenfolgen und Zahlen auszudrücken, wird die bedingte Anweisung umfangreich.
Das komplexe Gimmick ist UObject
ProjektTBsUTBUnitSkillKlasseUTBUnitTraitist ein austauschbares UObject.
UFUNCTION(BlueprintNativeEvent)
bool Activate(ATBUnitBase* TargetUnit, ATBHexTile* TargetTile);
UFUNCTION(BlueprintNativeEvent)
int32 ModifyOutgoingDamage(
ATBUnitBase* TargetUnit,
int32 Damage
) const;
Für jedes Attribut können die Ereignisse vor und nach Schaden, Wiederherstellung, Aktionsbeginn und -ende sowie Tötungsereignisse überschrieben werden.
DatentabelleTraitClassNotieren Sie, welche UObject-Klasse erstellt werden soll.
DataTable
Name/Beschreibung/Numerisch/Merkmalsklasse
↓
Von UTBUnitTrait abgeleitete Klassen
Tatsächliche Gimmick-Ausführung
DataTable verwaltet die Daten und UObject kapselt das Verhalten. Durch die Kombination der beiden Methoden ist es nicht erforderlich, eine Klasse für einfache numerische Merkmale zu erstellen und komplexe Merkmale nicht in einer großen Switch-Anweisung unterzubringen.