ue-data-driven-design

Implements data-driven Unreal gameplay using DataTables, DataAssets, curves, and config-backed settings.

55|5|Updated Mar 26, 2026
One-click install
npx skills add https://github.com/kevinpbuckley/unreal-engine-skills --skill ue-data-driven-design-kevinpbuckley
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: ue-data-driven-design
Source: https://github.com/kevinpbuckley/unreal-engine-skills/tree/main/skills/core/ue-data-driven-design
Command: npx skills add https://github.com/kevinpbuckley/unreal-engine-skills --skill ue-data-driven-design-kevinpbuckley

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Hardcoded gameplay values in Unreal Engine C++ make iteration slow and risky. This Skill guides you to move item stats, enemy configs, balance numbers, and curves into externally-editable assets and config objects that designers can tune without recompiling. ## Core Features & Use Cases - Container Selection Guidance: Choose the right data container for each need — UDataTable for tabular records, UCompositeDataTable for DLC/platform row layering, UDataAsset/UPrimaryDataAsset for rich config objects, UCurveFloat/UCurveTable/FRuntimeFloatCurve for value-over-input relationships, and UDeveloperSettings for Project Settings panel entries. - Real API Patterns: Provides working C++ snippets for FindRow, ForeachRow, FDataTableRowHandle pickers, config UPROPERTY binding to .ini files, and GetDefault accessors, all grounded in UE 5.8 engine source with file and line citations. - Validation & Gotchas: Covers IsDataValid overrides, Data Validation CI integration, and common pitfalls like hard references in rows, row name typos, and CSV column mismatches. - Use Case: You are defining an item system with hundreds of records. Use this Skill to set up an FTableRowBase row struct, a UDataTable asset, FDataTableRowHandle pickers for designers, and a UDeveloperSettings class exposing the table reference project-wide. ## Quick Start Ask the agent to create a data-driven item system in Unreal using a DataTable row struct and a DeveloperSettings class that references the table.

Frequently Asked Questions about ue-data-driven-design

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a DataTable row struct in Unreal C++?▼

Define a USTRUCT(BlueprintType) inheriting FTableRowBase with UPROPERTY fields, then create a DataTable asset using that struct. Access rows at runtime with FindRow<T>, ForeachRow<T>, or GetAllRows<T> on the UDataTable.

DataTable vs DataAsset in Unreal Engine — which should I use?▼

Use UDataTable for many rows of the same schema with spreadsheet-style workflows. Use UDataAsset or UPrimaryDataAsset when each record needs inheritance, rich nested types, Blueprint subclassing, or AssetManager async loading.

How do I expose project-wide settings in Unreal Project Settings panel?▼

Subclass UDeveloperSettings with UCLASS(Config=Game, DefaultConfig) and Config-marked UPROPERTYs, then add DeveloperSettings to PublicDependencyModuleNames. The class auto-registers under Project Settings with the CategoryName and SectionName you set.

Why does FindRow return null for my DataTable row?▼

FindRow returns null when the row name does not match exactly, logging only a warning. Prefer FDataTableRowHandle UPROPERTYs so designers pick rows from a validated dropdown instead of typing string names.

Can I override DataTable rows for DLC or platforms in Unreal?▼

Yes, use UCompositeDataTable, which stacks parent UDataTable assets so later parents override duplicate row names. It is read-only in the editor and rejects circular parent chains at load time.

When should I use config UPROPERTY instead of DataAssets?▼

Use UPROPERTY(Config) only for global programmer-near defaults stored in .ini files, not content-scale data. Config values are not visible in the Content Browser, so designers get a worse authoring experience than with DataTables or DataAssets.