やあ
メモだよ
今回は、
・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(); }