
Unreal Engine 5 を触っていると、
「データを元にActorを生成したい」
「でもエラーが大量に出て止まる」
という壁に必ず当たります。
今日は Blueprint初心者がつまずきやすいポイントを一つずつ潰しながら、
DataTable → Spawn → データ反映 までを整理しました。
同じところで悩む人の参考になればと思い、工程ごとにまとめます。
Contents
① DataTableの情報をBlueprintで扱う準備
まずやったのは、
- DataTableを用意する
- その1行分の情報を Blueprint で扱える形にする
という準備です。
ポイント
DataTableの1行は「バラバラの変数」ではなく、
構造体(Struct)としてまとめて扱うのが基本です。
そこで、
- ST_NPCInfo(構造体)
- 名前
- 年齢
- 文字列情報
- 種別(Enum)
- フラグ(Bool)
- など
を作り、
DataTableの1行 = ST_NPCInfo 1つ
という形にしました。
② DataTableから「行名一覧」を取得する
次にやったのが、
DataTableにどんな行が入っているかをBlueprintで取得する工程です。
使ったノードは:
Get Data Table Row Names
これで、
- DataTableに入っている行名が
- 配列(Array)として取得できます
ここまでは簡単ですが、ここからが初心者が最も詰まるポイントです。
③ 配列が「空のとき」を必ずチェックする
Blueprintはとても自由ですが、
配列が空でも容赦なく処理を続けます。
その結果、
- 配列の要素数が0
- ランダムでIndexを取る
- 存在しないIndexをGET
- エラーが大量発生
という事故が起きます。
対策としてやったこと
以下の「安全装置」を必ず入れました。
Out Row Names→LengthLength > 0Branch
- True:通常処理へ進む
- False:
Print String("RowNamesが0件")で終了
この Branch 1個で、
大量エラーは二度と出なくなります。
④ 配列から「ランダムに1つ」だけ選ぶ
安全が確保できたら、次はランダム選択です。
手順はシンプルですが、考え方が重要です。
- 配列の長さを
Lengthで取得 Length - 1を作るRandom Integer in Range- Min:0
- Max:Length - 1
GETノードで配列[Index]を取得
ポイント
- Random の Max に Length をそのまま入れない
- 必ず Length - 1
これは Blueprint あるあるの落とし穴です。
⑤ 選んだ行名から DataTable の1行を取得
ランダムに選んだ行名を使って、
Get Data Table Row
を呼びます。
ここでも、
- Row Found
- Row Not Found
が分かれているので、
- Row Found → 次の処理
- Row Not Found → Print String
という形で、失敗時の逃げ道を作りました。
⑥ DataTableの値を「構造体」にまとめ直す
Get Data Table Row から出てくる値は、
- 名前
- 数値
- 文字列
- Enum
- Bool
とバラバラです。
ここでやったのが、
Make ST_NPCInfo
を使って 再び1つの構造体にまとめることです。
この一手で、
- 引き回しが楽になる
- 後から仕様変更しやすくなる
- 関数に渡しやすくなる
というメリットが一気に出ます。
⑦ SpawnActor → ApplyNPCInfo という役割分担
Actor生成まわりで、今日一番スッキリしたのがここです。
やった設計
- SpawnActor
- 位置だけ決める
- データは渡さない
- ApplyNPCInfo(関数)
- 構造体を受け取る
- 内部変数に反映する
つまり、
Spawnは「生むだけ」
中身の設定は「専用関数に任せる」
という役割分担です。
⑧ Expose on Spawn を使わない判断
途中で出た警告がこれです。
Expose on Spawn にしているが Instance Editable ではない
これはエラーではなく、
「本当にその設計でいい?」という確認メッセージでした。
今回は、
- Spawn後に ApplyNPCInfo でまとめて設定する
- Spawn時に値を渡す必要がない
という設計だったため、
- Expose on Spawn → OFF
にして整理しました。
結果として、
- SpawnActorノードがスッキリ
- 設計も分かりやすく
- 警告も消える
という状態になりました。
⑨ 初心者がハマりやすいポイントまとめ
今日の作業で特に重要だったのは次の点です。
- 配列は 必ず空チェック
- Random Index は Length - 1
- Dataは 構造体でまとめる
- Spawnと設定は 役割を分ける
- Blueprintは 白線(実行線)が命
ここを意識するだけで、
Blueprintの安定性が一気に上がります。
おわりに
Blueprintは「とりあえず繋げば動く」反面、
安全装置を入れないと一瞬で壊れる側面もあります。
今回のように、
- 1工程ずつ分ける
- 失敗ルートを必ず用意する
- データの流れを整理する
これを意識すると、
後から見返しても理解できる Blueprint になります。
同じところで悩んでいる人の助けになれば幸いです。









