ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Data Table とは
UE5 の Data Table は、表形式のデータ(行 × 列)をアセットとして保持する仕組みです。1 行 1 レコードで、CSV / JSON から取り込めるため、エクセル管理しているマスターデータをそのまま UE に流し込めます。
典型的な用途:
- アイテム一覧(ID / 名前 / アイコン / 攻撃力 / 説明文)
- 敵キャラのパラメータ表(HP / 攻撃力 / ドロップ ID)
- 会話セリフ(ID / 話者 / 本文 / 次の ID)
- クエスト定義 / 装備 / バフ / 設定値
行構造(Row Structure)を定義
Data Table を作る前に、1 行の中身を表すデータ構造が必要です。C++ では USTRUCT + FTableRowBase、Blueprint では Structure アセットで定義します。
C++ で定義
// ItemData.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "ItemData.generated.h"
USTRUCT(BlueprintType)
struct FItemRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite) FName ItemId;
UPROPERTY(EditAnywhere, BlueprintReadWrite) FText DisplayName;
UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 Attack = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 Price = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite) TSoftObjectPtr<UTexture2D> Icon;
UPROPERTY(EditAnywhere, BlueprintReadWrite) FText Description;
};
Blueprint で定義
Content Browser → 右クリック → Blueprints → Structure → S_ItemRow。ItemId(Name)、DisplayName(Text)、Attack(Integer)など列を追加します。
Data Table アセットの作成
- Content Browser → 右クリック → Miscellaneous → Data Table
- 「Pick Row Structure」で先ほど作った
FItemRow/S_ItemRowを選択 DT_Itemsとして保存- ダブルクリックで Editor が開き、行追加・編集が可能
CSV から取り込む
マスターデータは Excel / スプレッドシートで作って CSV エクスポートし、Data Table にインポートするのが王道です。
Name,DisplayName,Attack,Price,Description
"sword01","鋼の剣",10,100,"基本的な剣です"
"sword02","炎の剣",25,500,"火属性付与"
"potion01","ポーション",0,30,"HP を 50 回復"
1 列目は必ず Name(Row Name となる識別子)です。
取り込み手順
- Content Browser → CSV をドラッグ&ドロップ
- 「DataTable Row Type」で行構造を選択
- インポート完了。再インポートも CSV 更新 → 右クリック → Reimport
Blueprint から行を取得
Get Data Table Row
Data Table → DT_Items
Row Name → "sword01"
↓
分岐: Found / NotFound
Found → Break Struct → DisplayName, Attack を使用
NotFound → エラー処理
C++ から行を取得
UPROPERTY(EditAnywhere) UDataTable* ItemTable;
void AMyGameMode::SetupItem(FName Id)
{
if (!ItemTable) return;
static const FString Ctx(TEXT("ItemLookup"));
FItemRow* Row = ItemTable->FindRow<FItemRow>(Id, Ctx);
if (Row)
{
UE_LOG(LogTemp, Log, TEXT("%s ATK=%d"), *Row->DisplayName.ToString(), Row->Attack);
}
}
全 Row を取り出す
TArray<FName> Names = ItemTable->GetRowNames();
for (const FName& Name : Names)
{
FItemRow* Row = ItemTable->FindRow<FItemRow>(Name, TEXT(""));
// 表示・処理
}
// 全件マップ取得
TMap<FName, uint8*> Map = ItemTable->GetRowMap();
Blueprint では Get Data Table Row Names ノードを使います。
CSV / JSON エクスポート
Data Table エディタの上部メニューから Export As CSV / JSON で外部出力できます。バージョン管理や校正用に便利です。
Data Table と Data Asset の使い分け
| 項目 | Data Table | Data Asset |
|---|---|---|
| レコード単位 | 表形式(1 行 1 レコード) | 1 アセット 1 オブジェクト |
| 取り込み | CSV/JSON から一括 | 個別作成 |
| 参照 | FName で検索 | 直接参照(Soft / Hard) |
| 変更頻度 | マスタデータ向き | 個別ロジック向き |
| Blueprint で派生 | 不可 | 可(Blueprintable) |
| 例 | アイテム一覧 / 敵パラメータ | 武器プロパティ / Boss 構成 |
多言語対応(ローカライズ)
Data Table の FText 列はそのまま UE のローカライゼーションシステムに乗ります。 FString ではなく FText を使うのが必須。Editor の Gather Text フローでキー抽出され、翻訳テーブルが作れます。
運用 Tips
- CSV の1 列目 Name は重複不可。重複行はインポート時に警告
- ID(Name 列)は意味のある文字列(
sword01等)にしてデバッグ性を確保 - 大量行は Editor の表示が重くなる → 分割 Data Table or Data Asset 化
- 列追加時は Struct を変更後 Data Table の Reimport
- Hot Reload で構造変更後にクラッシュする場合は Editor 再起動が確実
- Asset Soft Reference(
TSoftObjectPtr)にすると遅延ロードになりメモリ節約
サンプル: アイテムショップ実装
void AShopManager::RefreshShopList()
{
TArray<FName> Names = ItemTable->GetRowNames();
for (FName N : Names)
{
if (auto* Row = ItemTable->FindRow<FItemRow>(N, TEXT("")))
{
FShopEntry Entry;
Entry.Id = Row->ItemId;
Entry.Name = Row->DisplayName;
Entry.Price = Row->Price;
ShopList.Add(Entry);
}
}
}
FAQ
Q: 行を動的に追加できる?
A: ランタイムで UDataTable::AddRow は可能ですが、Shipping ビルドでは不可。ランタイム編集は Data Asset や独自構造のほうが向きます。
Q: CSV インポートで日本語が文字化け
A: CSV を UTF-8 (BOM 付き) で保存してください。Excel で「CSV UTF-8」を選ぶか、テキストエディタで BOM 付き変換。
Q: 行の編集を制限したい
A: Source CSV を Single Source of Truth とし、Editor 側を読み取り専用にする運用が一般的。Reimport で常に CSV を反映させます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?