1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

G-BlossomAdvent Calendar 2024

Day 5

【UE】DataTableを使わずにBlueprintでCSVでデータ管理してみよう

Last updated at Posted at 2024-12-04

はじめに

こんにちは、G-Blossomエンジニアのぴーよです!

今回はUEでのCSVの取り扱い方について実践しつつご説明しようと思います。

UEでCSVを取り扱う手法は大きく2種類あります。

1. DataTableを作ってインポート

  • 良い点
    • 非常に強力な機能でワークフローが充実している
    • 様々な型を利用できる
  • 注意点
    • 複数行のヘッダーを使えない
    • キーバリュー型での取り扱いになるので、条件づけて絞り込みは工夫が必要
    • トランザクション的な運用はできない。あくまでマスタ

2. CSVをテキストで読み込んでパースする

  • 良い点
    • 複数行のヘッダーも読み込める
    • 特定の座標でデータを拾えるのでマッピングの自由度が高い
    • ファイルへの書き出しも可能なのでトランザクションにすることも可能(推奨するかは別)
  • 注意点
    • パーサーを自前で用意しないといけない
    • 基本的にStringで取得する

今回は2の発展形で、パーサーのプラグインを使用します
Blueprint CSV Parsing
https://www.fab.com/ja/listings/1f5fc0dd-6b38-475b-8e5d-4dddae0d5852

今回の目標

CSVオブジェクトを作成して任意の値を取れるようになろう!

手順

1. Blueprint CSV Parsingをエンジンにインストール

前述のBlueprint CSV Parsingをご利用のUEのバージョンに対応するものをFabからダウンロードしてインストールします。
https://www.fab.com/ja/listings/1f5fc0dd-6b38-475b-8e5d-4dddae0d5852

2. プラグインの有効化

プロジェクトのプラグイン設定からBlueprintCSVParsingのチェックボックスをtrueにして有効化します。
image.png

3. CSVの格納場所の作成

今回はプロジェクト直下にInputData/CSVのフォルダを作成します。
今回はテストデータとしてこちらを使います。右クリックで保存し、配置してください。
test.csv
内容

,test1,test2,test3
a,1,11,111
b,2,22,222
c,3,33,333

4. 関数の作成

任意のBlueprintにCSV Load関数を作成します。インプットアウトプットは画像参照
image.png

5. ファイルの読み込み部の作成

CSV Load関数を開き、Text File Load to Stringノードへ接続します。
Filenameはフルパス付きのファイル名の必要があるので、Get Project Directoryでプロジェクトのディレクトリを取得して、InputData/CSV内を指定しています。

引数のCSVFileNameに直接ファイル名を指定すれば良い形です。

image.png

6. CSVオブジェクトの成型

5.の続きにBranchノードを繋ぎ、TrueParse CSV Rowsノードをつなぎます。CSVStringに先ほどのText File Load to Stringで取得したFileDataをつなぎ、ReturnValueReturnNodeCSVObjectに繋ぎ、Successにチェックを入れます。
False側には直接ReturnNodeをつなぎ、チェックが入っていないことを確認して完成。
image.png

7. 関数の呼び出し

イベントグラフのBeginPlayでテストしてみましょう。
BeginPlayから引っ張ってCSVLoadを呼ぶと、CSVFileNameに入力できるようになっています。

ここにCSVファイル名を入力するとCSVObjectが取れるようになりました。
image.png

実際に値を見てみましょう。
CSVObjectから引っ張って適当な変数を作り、ブレークポイントを設定して実行すると画像の様になります。
行と列情報が取れていることがわかりますね。
image.png

8. 任意の座標の取得

ここまでくれば色々な方法で値を取得できます。
CSVObjから引っ張ってgetで検索してみましょう。
image.png

CSVグループの中に色々ありますね、実際に置いてあげるとこんな感じ。
image.png
どの取得方法もインデックスでも名前でも取れるようになっていますね。
個人的には良くGet Row by Keyを多用しています。条件付けする際にも何かと使えるのでオススメです

実際に繋いでみたのがこちら
image.png
a行の値が取れていますね!

最後に

ゲームバランス等を考える際にパラメータ調整をプロジェクトから切り離したいケースなどでは気楽に扱えます。
めざせ爆速テスト環境!

参考資料

パッケージ化の際に役立つかも

【UE4】外部ファイルを含んだprojectをpackagingするときの注意点
https://tyojugiga.hatenablog.com/entry/2019/10/25/113457

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?