← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-10

Ampliando sus habilidades con DataTable y UObject

Cómo separar datos numéricos de trucos complejos

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Si escribes todas las estadísticas y características de cada unidad en un constructor de C++, tendrás que reconstruirlas cada vez que cambies el equilibrio. ProjectTB separa los datos numéricos del comportamiento complejo.

Los números simples son DataTable

En el DataTable se colocan los valores que se pueden expresar en filas y columnas, como la fuerza física por nivel, el poder de ataque y la experiencia requerida.

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

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

Incluso si los valores de planificación cambian, la lógica de C++ puede seguir siendo la misma. Sin embargo, si intenta expresar todas las acciones solo con cadenas de nombres y números, la declaración condicional se vuelve enorme.

El truco complejo es UObject

Proyecto TBUTBUnitSkillclaseUTBUnitTraites un UObject reemplazable.

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

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

Para cada atributo, se pueden anular los eventos antes y después del daño, la recuperación, el inicio y el final de la acción y los eventos de eliminación.

Tabla de datosTraitClassRegistre qué clase UObject crear.

DataTable
Nombre/Descripción/Numérico/Clase de rasgo
                    ↓
Clases derivadas de UTBUnitTrait
Ejecución real del truco

DataTable gestiona los datos y UObject encapsula el comportamiento. Al combinar los dos métodos, no es necesario crear una clase para características numéricas simples y no es necesario incluir características complejas en una declaración de cambio enorme.