この記事はUnreal Engine (UE) Advent Calendar 2025の12日目の記事です。
概要
今回はDataTable系のノードの動作とどう使うのか見ていきます
データテーブルってGetDataTableRowで要素を取得する以外使ったことがない人も多そう

EvaluateCurveTableRow
ゲームでレベルごとのステータスを決める時、1つ1つ値を設定するの面倒ですよね
1000Lvあったりするともう大変
それを解決できるであろうノードがこれ
なお、細かいことを言うとDataTableノードではない…
なぜなら使用するアセットがカーブテーブルだから。

作ろうとするとカーブの補間タイプを聞かれます
これらは通常のカーブで使われるものと同じですね
・Linear:素直に直線でキーの間を繋いでくれる。キーの値を手入力できる
・Cubic:カーブアセットと全く同じ間隔で使用可能だが、キーごとの値を手入力できない
・Constant:崖のように値が一気に変わる。正直これいる?な選択肢

今回はわかりやすさ優先でLinearを選択

上側にある電卓のような行列のような切り替えボタンでこの画面に変更できます。
[+カーブ]で値の列を追加し、電卓のようなボタンの右にある、「↴」ボタンで行を追加できる
とりあえず今回はゲームのレベルごとのステータスといった感じでHP/Attack/Defenceそれぞれ0と100の値を設定しておきます
実際にノードを使ってみると、こんな感じです

CurveTableとRowNameはわかりますが、見慣れないInXYという引数が。
このInXYがゲームでいうところのレベルが入る部分
Attackの60を参照して取得するので、今回はOutXYから120という値が取得できた
ちなみに電卓のようなボタンの左にある「~」のボタンを押すと実際のカーブの線が見られます
60を渡すと120が戻ってくるのがわかりますね

このように、中間の値を設定せずともステータス設定などができるので
RPGなどレベルごとのステータスをざっくり設定するのに便利なノードです
なお、身も蓋もない事を言うと複数のカーブアセットからGetFloatValueで取得するのと対して変わらないです

ただ、単一アセットなので管理がしやすいこと、キーの値を直接入力できるなど優位点は多いです
ステータス以外にも、モードごとの技性能の変化などなど使い道は色々考えられそうですね
DoesDataTableRowExist
設定したRowNameがデータテーブル内にあるか確認するノード

それだけと言えば本当にそれだけ。
GetDataTableRowノードでいいじゃん。とも思うが、データテーブルの内容を取りに行かないのでこちらのほうが処理速度が早いらしい。
アイテムデータ図鑑のような莫大に大きなテーブルを、プレイヤーが入力し検索する機能を実装する際にはお世話になるでしょう。
GetDataTableColumnAsString
データテーブルの指定した名前の列のデータを全て取得するノード

データテーブルの上から順番に全てのパラメータをString形式で取得してくるのだが
IntやFloat、Stringなどの一般的な変数であればそのまま文字列となり
Materialなどアセットを参照するものはパスが帰って来るため、一般的な変数を取得してくるのが基本となる
ただし、その配列に入っているデータがどのキーのものなのかまではわからないため、それを取得する場合はGetDataTableRowNamesノードを組み合わせる必要がでてしまう。
しかも取得する型がStringなので比較するにも変換を噛ませないといけなくてよろしくない。
ではどんな場合に使えるかについてですが
敵図鑑のリストなどの名前だけの一覧が欲しい場合などに便利です
UIなどで名前の一覧を選択させる場合には敵の名前以外の情報は必要ないため、このノードで抜き出してしまえます
カーソルを合わせたときにだけデータテーブルの細かいステータスを取得すればいいため、こちらも処理負荷軽減に一役買ってくれるというわけです
GetDataTableColumnNames
こちらはデータテーブルを行の名前を全て取得するノード
GetDataTableRowNamesノードの兄弟のようなもの

行の名前なので、データテーブルそのものというよりデータテーブルを作成する際の構造体のメンバ変数の名前を返すノード…
行の名前だけ返して何になるねん!と普通はなるが
前述のGetDataTableColumnAsStringノードと組み合わせることで実在する行の名前を扱えるようになります
しかし、データテーブルの構造体のメンバの名前が変わるなどあまり無いですし、順番を入れ替えられたりしても取得できる内容が変わってしまうため、GetDataTableColumnAsStringノードに手入力したほうが確実に見えます
じゃあ使い道となると、EUW(EditorUtilityWidget)でデータテーブルを渡すと型の制限なく中のパラメータを表示するなどできそうです

プレイヤーと敵のデータテーブルの型が違うという事もあるため、ダメージシミュレーターなどをEUWで作る際などには使えるかもしれないですね
この先は常用のものではないノード群なので、EUWなどかなり特殊な事をするでもない限りは今のところ用途はないかもです。
GetDataTableColumnExportNames
先程のGetDataTableColumnNamesとほぼ同じく、データテーブルの行の名前を取得するノード

さっきと同じやんけ!
となるが、戻り値がStringのため、EUWの表示のために使うのであればこちらのほうが楽
GetDataTableColumnNamesノードで取得できるName型をString変換して使おうとすると余計な文字列が付いてくる。
それを除去しようとStringのSplitノードなどを使うと、メンバ名に入っていた[_]などの記号が引っかかって正確に取得できないなど問題があるが、こちらのノードにはそれがないため安全だし楽
公式にもほとんど情報がないので、使うかと言うと…というノード

エクスポート用の名前の取得ができるということなので、EUWでデータテーブルのパラメータをコネコネしてCSVに自前で出力をしたい場合などに使うもののようです
GetDataTableColumnNameFromExportName
行のStringからその行の取得に必要なName型を返すノード

先程のGetDataTableColumnExportNamesノードで受け取ったString型をGetDataTableColumnAsStringノードで使えるName型に変換してくれるノード
こいつはこいつで通常使う事のないノード…
GetDataTableRowStruct
型が帰ってきたからと言ってできることは少なく、せいぜい画像のように比較して
指定したデータテーブルが特定の型なのか判別することぐらい。こちらもEUWで使うことぐらいしか用途はない
あとは以下のようにすれば構造体のパスを取得できるため
データテーブルの元の構造体の場所がわからなくなった場合に探すのに使える

参照ビューワーで良いじゃん…という点に関しては複数のデータテーブルをまとめて処理して使われている構造体のリストを作成するなど、アセットの整理整頓などにどうぞ
まとめ
・EvaluateCurvceTableRow:RPGなどレベルごとのステータスをざっくり設定するのに便利
・DoesDataTableRowExist:莫大に大きなテーブルを、プレイヤーが入力し検索する機能に使える
・GetDataTableColumnAsString:敵図鑑のリストなどの名前だけの一覧が欲しい場合などに便利
・GetDataTableColumnNames:GetDataTableColumnAsString用の行の名前を扱える
・GetDataTableColumnExportNames:一般的に使われるものではない
・GetDataTableColumnNameFromExportName:一般的に使われるものではない
・GetDataTableRowStruct:指定したデータテーブルが特定の型なのか判別できる
もちろん使い方は一つではないですが、これを機に効率的なDataTable運用をしてみてはどうでしょうか

