Chapter 89無料公開

【C++】DataTable

ポジTA
ポジTA
2024.05.25に更新

DataTable

DataTable用の構造体を作成する

DataTable用の構造体「FCPPFruitInfo」を作成します。

https://zenn.dev/posita33/books/ue5_starter_cpp_and_bp_001/viewer/chap_02_cpp-structure

親クラスに[None]を選択します。

ClassTypeとClass名を設定します。

Property Value
Class Type Public
Name CPPFruitInfo

「CPPFruitInfo.cpp」を削除します。

構造体「FCPPFruitInfo」を「CPPFruitInfo.h」に実装します。

Variable Name Variable Type
Price int32
Weight float
CPPFruitInfo.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "CPPFruitInfo.generated.h"

USTRUCT(Blueprintable)
struct FCPPFruitInfo : public FTableRowBase
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 Price;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float Weight;
};

Buildを実行します。

DataTableを作成する

構造体を作成したらDataTableを作成します。

Contents Browserの空きスペースを右クリック -> Miscellaneous -> 「Data Table」を選択する。

DataTble用に作成した構造体「FCPPFruitInfo」を選択して「OK」ボタンをクリックします。

作成されたDataTableの名前を「DT_CPPFruitInfo」に設定します。

データを入力する

作成したDataTable「DT_BPFruitInfo」を開きます。
「+Add」をクリックし、「Row Name」と構造体のメンバー変数に値を入力します。

「Row Name」には重複した値を入力できません。

以下の表の情報を入力します。

Row Name Price Weight
Apple 100 50.5
Orange 200 100.0
Banana 298 250.0

BlueprintでDataTableから値を取得する

DataTableから値を取得する処理を実装するBlueprint「BP_CPPDataTableSample(親クラス:Actor)」を作成します。

変数を作成する

DataTableの「Soft Object Reference」を「Variable Type」に設定した変数を追加します。

Variable Name Variable Type
DataTable DataTable(Soft Object Reference)

「Compile」を実行して、変数のDefaultValueに「DT_BPFruitInfo」を設定します。

Begin PlayイベントでDataTableを読み込んでRowNameを指定して出力する

変数にDataTableの「Soft Object Reference」を読み込むには「Async Load Asset」ノードを使用します。
読み込みが完了すると「Completed」実行ピンが呼ばれ、「Object」アウトピンにはDataTableが読み込まれた参照(Object Reference)が入っています。
「Cast to DataTable」でDataTableに変換します。

「Get Data Table Row」の「Row Name」に取得したいRow(行)の「Row Name」を入力します。
「Row Name」が見つかると「Row Found」が実行されて「Out Row」に構造体の参照が入っています。
「Out Row」からDataTableを作成した時に設定した構造体「FCPPFruitInfo」を取得できます。

「BP_CPPDataTableSample」をViewportに追加します。

プレイするとDataTableの「Row Name」が「Apple」の行の情報を出力できます。

DataTableのすべてのRow Nameを取得して出力する

DataTableのRow(行)をすべて出力する処理に変更します。

「Get Data Table Row Names」はすべての行の「Row Name」を配列として取得できます。

プレイするとDataTableの「Row Name」がすべて出力できます。

参照URL

https://dev.epicgames.com/community/learning/courses/www/unreal-engine-c/xd0n/unreal-engine-c

https://forums.unrealengine.com/t/how-to-break-struct-from-c-function/385671

https://dev.epicgames.com/documentation/ja-jp/unreal-engine/class-specifiers