【Unreal Engine】Data Tableの基本:構造体の定義からCSVインポートまで

作成: 2025-12-12

アイテムや敵のパラメータなど、大量のデータを効率的に管理するData Table。構造体の作成、CSVファイルのインポート、Get Data Table Rowによるデータ取得の流れを紹介。

ゲーム開発において、キャラクターのステータス、アイテムのパラメータ、レベルデザインの数値など、管理すべきデータは膨大です。これらのデータをBlueprintやC++のコード内に直接書き込んでしまうと、次のような問題が発生します。

  1. 調整の非効率性: データを少し変更するたびに、コードの編集と再コンパイルが必要になる。
  2. 役割の混在: デザイナーやプランナーがデータを調整したいのに、プログラマーの助けが必要になる。
  3. データの見通しの悪さ: どこにどんなデータがあるのか、コードを読まないと把握しにくい。

このような問題を解決し、開発効率とデータの管理性を飛躍的に向上させるのが、Unreal EngineのData Table(データテーブル) です。本記事では、Data Tableの基本から、外部のCSVファイルを使った効率的なデータインポート、そしてBlueprintでの実践的な活用方法までを、初心者の方にも分かりやすく解説します。


Data Tableの基本構造

Data Tableは、スプレッドシートのような形式でゲームデータを一元管理するためのアセットです。しかし、ただの表ではなく、Unreal Engineの構造体(Struct) と密接に連携しています。

構造体(Struct)の役割

Data Tableを作成する前に、まずデータの「型」を定義する必要があります。これが構造体(Structure)の役割です。

例えば、アイテムのデータを管理したい場合、アイテム名(String)、攻撃力(Integer)、価格(Float)といった変数をまとめたFItemDataという構造体を定義します。Data Tableは、この構造体を「行のテンプレート」として使用します。

Data Tableの作成手順

  1. 構造体の作成:
    • コンテンツブラウザで右クリック → BlueprintStructure を選択し、必要な変数を定義します。(例: ItemData_ST

💡 構造体とData Tableの関係

-Blueprintで作成した構造体:特別な継承設定は不要で、そのままData Tableの行構造体(Row Structure)として指定できます。これはUE4から変わらない仕様です。

-C++で定義した構造体FTableRowBaseを継承する必要があります。

// C++でData Table用構造体を定義する例
USTRUCT(BlueprintType)
struct FItemData : public FTableRowBase
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    FString ItemName;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 AttackPower;
};
  1. Data Tableアセットの作成:
    • コンテンツブラウザで右クリック → MiscellaneousData Table を選択します。
    • 作成時に、先ほど定義した構造体(例: ItemData_ST)を行の構造体(Row Structure) として指定します。

これで、Data Tableアセットが作成され、エディタ内で直接データを入力できるようになります。


CSVファイルのインポート

大量のデータを手動で入力するのは非効率的です。Data Tableの最大の強みの一つは、外部のCSV(Comma Separated Values)ファイルをインポートできる点にあります。

CSVファイルの準備

Data TableにインポートするためのCSVファイルには、厳格なフォーマットが必要です。

RowNameItemNameAttackPowerPrice
Sword_01鋼の剣15100
Shield_01木製の盾550

重要なルール:

  1. 1行目(ヘッダー行): Data Tableの行の構造体(ItemData_ST)で定義した変数名と完全に一致 させる必要があります(大文字・小文字も区別されます)。
  2. 1列目(RowName): これは特別な列で、各行を一意に識別するための名前(キー)になります。重複は許されません
  3. 区切り文字: 基本的にカンマ(,)を使用します。

このCSVファイルを、メモ帳やExcelなどの表計算ソフトで作成し、UTF-8形式 で保存します。

💡 日本語を含むCSVの注意点

日本語などのマルチバイト文字を含むCSVファイルは、BOM付きUTF-8(UTF-8 with BOM) で保存することを推奨します。BOMなしの場合、文字化けが発生することがあります。また、CSVファイルをコンテンツブラウザに直接ドラッグ&ドロップすることでもインポートできます(Data Tableの作成とインポートを同時に行えます)。

Unreal Engineへのインポート

  1. 作成したData Tableアセット(例: DT_ItemData)を右クリックします。
  2. Importを選択し、準備したCSVファイルを選択します。
  3. インポートが成功すると、Data Tableエディタ内にCSVの内容が反映されます。

💡 ベストプラクティス: CSVファイルをプロジェクトのContentフォルダ内の専用フォルダ(例: Content/Data/CSV)に配置しておくと、バージョン管理が容易になります。


Blueprintでのデータ取得

Data Tableにデータが格納されたら、次はBlueprintでそのデータを活用します。

データの取得ノード

Data Tableから特定の行のデータを取得するために、主に以下のノードを使用します。

ノード名用途
Get Data Table RowRow Name(キー)を指定して、対応する構造体のデータを取得する。最も一般的。
Get Data Table Row by Index行のインデックス(0から始まる番号)を指定してデータを取得する。
Get Data Table Row NamesData Table内のすべてのRow Name(キー)のリストを取得する。

Blueprint実装例

ここでは、アイテムのRow Name(例: Sword_01)を指定して、そのアイテムの攻撃力を取得する処理を実装します。

graph TD
    A[Event BeginPlay] --> B{Get Data Table Row};
    B -- Data Table --> C[DT_ItemData (Data Table Asset)];
    B -- Row Name --> D["Sword_01 (Name)"];
    B -- Found? (Boolean) --> E{Branch};
    B -- Out Row (ItemData_ST) --> F[Break ItemData_ST];
    E -- True --> G[Get AttackPower];
    G --> H[Print String: AttackPower];
    E -- False --> I[Print String: Error - Row Not Found];

手順:

  1. Get Data Table Rowノードを配置します。
  2. Data Tableピンに、作成したData Tableアセット(DT_ItemData)を指定します。
  3. Row Nameピンに、取得したいデータのキー(例: Sword_01)を入力します。
  4. Out Rowピンから、対応する構造体(ItemData_ST)のデータが出力されます。
  5. Break ItemData_STノードを接続し、構造体の中身(ItemName, AttackPower, Priceなど)を取り出します。
  6. Found Rowピン(Boolean)を使って、データが見つかったかどうかをチェックし、エラー処理を行います。

この仕組みにより、コードを変更することなく、CSVファイルを編集するだけでゲームのバランス調整が可能になります。


よくある間違いとベストプラクティス

Data Tableを効果的に使うために、以下の点に注意しましょう。

❌ よくある間違い

  • 構造体とCSVの不一致: CSVのヘッダー名が、構造体の変数名と一文字でも異なっていると、インポート時にエラーが発生するか、データが正しく読み込まれません。
  • Row Nameの重複: Row Nameは一意のキーでなければなりません。重複していると、意図しないデータが読み込まれる原因になります。
  • データ型の不一致: CSVのセルに入力された値が、構造体で定義された型(例: Integerの変数に文字列)と異なると、インポート時に警告やエラーが出ます。

✅ ベストプラクティス

  • 構造体の命名規則: 構造体名には_ST_Dataといったサフィックスを付け(例: ItemData_ST)、Data Tableの行の構造体であることを明確にします。
  • データ駆動の徹底: 調整が必要な数値は、可能な限りData Tableに集約し、コードから直接マジックナンバーを排除します。
  • コメントと説明: 構造体の各変数には、必ずコメント(説明)を記述し、他の開発者がその変数の意味を理解できるようにします。
  • 外部ツールとの連携: ExcelやGoogle Sheetsなどの外部ツールでデータを管理し、エクスポート機能を使ってCSVを生成するワークフローを確立すると、データ管理がさらに効率化されます。

Data Table活用のポイント

Unreal EngineのData Tableは、データ駆動型の開発を実現するための強力なツールです。

要素ポイント
基本構造体(Struct)をテンプレートとして使用する。
インポートCSVファイルの1行目は構造体の変数名と完全に一致させる。1列目は一意のRow Nameとする。
活用Get Data Table RowノードでRow Nameを指定し、必要なデータを取得する。
メリットデザイナーやプランナーによるデータ調整が容易になり、開発のイテレーション速度が向上する。

Data Tableを使いこなすことで、より柔軟でメンテナンス性の高いゲーム開発が可能になります。まずは簡単なアイテムデータからData Tableへの移行を試み、その効率性を実感してください。