Unreal Engine 5|DataTable × Blueprintで「安全にActorを生成する」までの実装メモ(初心者向け)

Unreal Engine 5 を触っていると、
「データを元にActorを生成したい」
「でもエラーが大量に出て止まる」
という壁に必ず当たります。

今日は Blueprint初心者がつまずきやすいポイントを一つずつ潰しながら
DataTable → Spawn → データ反映 までを整理しました。
同じところで悩む人の参考になればと思い、工程ごとにまとめます。


① 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
  • エラーが大量発生

という事故が起きます。

対策としてやったこと

以下の「安全装置」を必ず入れました。

  1. Out Row NamesLength
  2. Length > 0
  3. Branch
  • True:通常処理へ進む
  • False:Print String("RowNamesが0件") で終了

この Branch 1個で、
大量エラーは二度と出なくなります。


④ 配列から「ランダムに1つ」だけ選ぶ

安全が確保できたら、次はランダム選択です。

手順はシンプルですが、考え方が重要です。

  1. 配列の長さを Length で取得
  2. Length - 1 を作る
  3. Random Integer in Range
    • Min:0
    • Max:Length - 1
  4. 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 になります。

同じところで悩んでいる人の助けになれば幸いです。

おすすめの記事