Recommendation
Use a Data Table for many records that share one row structure and benefit from spreadsheet editing. Use Data Assets when each definition needs its own asset or may grow beyond a flat record.
Compare the options
Data Table
Choose when
- Many records share the same fields.
- Designers need to compare or edit values in bulk.
- CSV or JSON import and reimport is part of the workflow.
Tradeoffs
- Every row follows the same UStruct.
- The table is one shared asset in source control.
- Hard asset references can load their targets with the table.
- Blueprint
- Use Get Data Table Row or a Data Table Row Handle, then break the row struct.
- C++
- Use UDataTable, a struct derived from FTableRowBase, FDataTableRowHandle, and FindRow<T>().
Data Asset
Choose when
- Each definition needs its own Content Browser asset.
- Definitions contain rich asset references.
- Different definition types need different classes.
Tradeoffs
- Individual assets are easier to own and review separately.
- Bulk comparison and spreadsheet round-tripping are weaker.
- Blueprint
- Use a typed Data Asset object reference and read its exposed properties.
- C++
- Create a class derived from UDataAsset and create instances in the Content Browser.
Requirements
Both systems are built into the Engine. A Data Table row struct must inherit from FTableRowBase.
Example
Store 300 level-to-XP records in a Data Table. Store each weapon definition in a Data Asset when it owns meshes, sounds, abilities, and presentation data.