fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でデータテーブル(Data Table)のデータを取得する(UDataTable、Find Row)

C++でデータテーブル(Data Table)のデータを取得する方法です。

こちらを参考にさせていただきました。

・Get Data Table Row in c++
https://forums.unrealengine.com/t/get-data-table-row-in-c/143296

FName LocalRowName = FDataTableRowHandle.RowName;
FYourStruct* OutRow = FDataTableRowHandle.DataTable->FindRow< fyourstruct >(LocalRowName, "");


・UE4 DataTableからのパラメータ取得とJSONインポートについて
https://qiita.com/unknown_ds/items/4da34cccb3181e633efe

auto _Record = MyDataTable->FindRow< fmydatatable >(_Names[_Lp], FString());


抜粋すると上記のように「Find Row」関数を使って取得するようです。

こんな感じの構造体を作ってデータテーブルに割り当てます。

// データテーブルに割り当てる構造体
USTRUCT(BlueprintType)
struct FDataTableTest : public FTableRowBase
{

GENERATED_BODY()

public:

UPROPERTY(EditAnywhere, BlueprintReadWrite)

float Param = 0.0f;

};

割り当てたデータテーブルから行のデータを取得するにはこんな感じで書きます。

// データテーブル
UDataTable* aDataTable;
// データテーブル取得
auto aRecord = aDataTable->FindRow< FDataTableTest >("RowName","");

データテーブル(Data Table)変数の「Find Row」関数を使ってデータテーブルの行のデータを取得思案す。
「Find Row」の第一引数には「行の名前(定義名)」を指定します。
第二引数は…調べてもよくわかりませんでした。
調べても上記第一引数を指定して、第二引数は指定なしでデータを取得していることが多いのですよね…。

ちなみになのですが「auto」変数については以下の記載がドキュメントにあります。

・コーディング規約
https://docs.unrealengine.com/4.27/ja/ProductionPipelines/DevelopmentSetup/CodingStandard/

'auto' キーワード
以下の例外がなければ、C++ コードで auto を使わないようにします。
初期化している型について常に明示的でなければなりません。
つまり、読み手がその型を見えるようにしなければなりません。
このルールは C# の ‘var' キーワードの使用にも適用されます。

auto の使用はどのような場合に認められますか?
・lambda を変数にバインドする必要がある場合です。lambda 型はコードで表現できないからです。
・iterator 変数に対して認められます。しかし、iterator の型が非常に詳細で読みづらくなります。
・テンプレートのコードで認められます。この場合、式の型は簡単に見分けることはできません。これは高度な事例です。

コードの読み手に型がはっきり見えるようにすることは非常に重要です。
一部の IDE では型を推測できますが、これはコンパイル可能な状態にあるコードに依存します。
merge/diff ツールのユーザーもサポートしません。または、
GitHub 上など各ソース ファイルを別個に見る場合などもサポートしません。

認められる方法で auto を使う場合、型名で使うように常に正しく const、 & または * を使うようにしてください。
`auto` を使うと、推測された型を希望の型にします。


なのであまり「auto」変数を使わないほうがよいのかなと…。
上記データテーブルのデータ取得のコードは以下のように構造体指定で書くこともできます。

// データテーブル
UDataTable* aDataTable;
// データテーブル取得
FDataTableTest* aRecord = aDataTable->FindRow< FDataTableTest >("RowName","");

こちらの方が他の人に対してもわかりやすいかもしれないですね。

| UE4 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/663-a5049b57

TRACKBACK

PREV | PAGE-SELECT | NEXT