UE4 C++データテーブル

やあ

メモだよ
今回は、
C++上で作った構造体をエディタのDataTableから使う
・登録したデータをC++から使う
をやるよ。

hoge.h

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

USTRUCT(BlueprintType)
struct FHoge : public FDataTable
{
    GENERATED_USTRUCT_BODY()
public:
    UPROPERTY(EditAnywhere)
        int32 Health;
};

こんな感じで宣言しておくとエディタ上で選択できるようになる。

で、エディタ上でなんやかんやデータを登録したら。
C++から登録したデータを読み出すのは、
hogeActor.h

#include "CoreMinimal.h"
#include "hoge.h"
#include "GameFramework/Actor.h"

#include "hogeActor.generated.h"

UCLASS()
class AhogeActor : public AActor
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere)
        UDataTable* DataTable;

    int32 GetHealth(const FName& In) const;
protected:
    virtual void BeginPlay() override;

hogeActor.cpp

#include "hogeActor.h"

void AhogeActor::BeginPlay()
{
    Super::BeginPlay();

    int32 Health = GetHealth("Huga");
    UE_LOG(LogTemp, Log, TEXT("%d"), Health);
}

int32 AhogeActor::GetHealth(const FName& In) const
{
    FHoge* Res = DataTable->FindRow<FHoge>(In, FString());
    if (Res != nullptr)
    {
        return Res->Health;
    }
    return 0;
}

これでおっけー。

汎用化 hoge.h

template<class THogeStruct>
THogeStruct GetValue(UDataTable* DT, const FName& In)
{
    THogeStruct* HogeStruct = DT->FindRow<THogeStruct>(In, FString());
    return HogeStruct ? *HogeStruct : THogeStruct();
}