간단하게 특정 경로의 Json 파일을 읽어와서 게임에 적용 시키는 것을 해봅시다.
먼저 코드를 작성하기전에 언리얼에서 Json을 사용하려면 모듈 Json이 필요합니다.
(프로젝트명).Build.cs 에 꼭 Json 을 추가하세요.
using UnrealBuildTool;
public class SimpleTest : ModuleRules
{
public SimpleTest(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
"HeadMountedDisplay",
"Json"
});
}
}
그리고 임의로 Json 데이터를 하나 생성해 줍시다.
{
"name": "Jeylee",
"level": 10,
"gold": 5000,
"experience": 20000,
"helth": 300,
"mana": 100
}
필자는 프로젝트 폴더 경로에 data 폴더를 하나 만들고 폴더안에 Simple.json이라는 파일을 생성하였습니다.
CJsonReder.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CJsonReder.generated.h"
USTRUCT(BlueprintType)
struct SIMPLETEST_API FJsonData
{
GENERATED_USTRUCT_BODY()
FString name;
int32 level;
int32 gold;
int32 experience;
int32 helth;
int32 mana;
};
UCLASS()
class SIMPLETEST_API ACJsonReder : public AActor
{
GENERATED_BODY()
public:
ACJsonReder();
protected:
virtual void BeginPlay() override;
private:
UFUNCTION()
void OnJsonReder();
private:
FJsonData m_JsonData;
};
CJsonReder.cpp
#include "CJsonReder.h"
ACJsonReder::ACJsonReder()
{
}
void ACJsonReder::BeginPlay()
{
Super::BeginPlay();
OnJsonReder();
}
void ACJsonReder::OnJsonReder()
{
FString path = FPaths::ProjectDir() + "/../data/Simple.json";
FString jsonstr;
FFileHelper::LoadFileToString(jsonstr, *path);
if (jsonstr == "") // dada/Simple.json 없다면
return;
TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr);
TSharedPtr<FJsonObject> jsonObj = MakeShareable(new FJsonObject());
m_JsonData = {};
if (FJsonSerializer::Deserialize(reader, jsonObj) && jsonObj.IsValid())
{
m_JsonData.name = *jsonObj->GetStringField(L"name");
m_JsonData.level = jsonObj->GetIntegerField(L"level");
m_JsonData.gold = jsonObj->GetIntegerField(L"gold");
m_JsonData.experience = jsonObj->GetIntegerField(L"experience");
m_JsonData.helth = jsonObj->GetIntegerField(L"helth");
m_JsonData.mana = jsonObj->GetIntegerField(L"mana");
}
UE_LOG(LogTemp, Log, L"[name ] : %s", *m_JsonData.name);
UE_LOG(LogTemp, Log, L"[level ] : %d", m_JsonData.level);
UE_LOG(LogTemp, Log, L"[gold ] : %d", m_JsonData.gold);
UE_LOG(LogTemp, Log, L"[experience ] : %d", m_JsonData.experience);
UE_LOG(LogTemp, Log, L"[helth ] : %d", m_JsonData.helth);
UE_LOG(LogTemp, Log, L"[mana ] : %d", m_JsonData.mana);
}
Fstring path에 Json 데이터 경로를 넣어주고 자식 블프를 하나 생성하여 프로젝트를 실행시키면
로그에 저장한 데이터가 출력 되는것을 확인 할 수 있습니다.
위 방법을 통해 다양한 데이터를 Json으로 저장 시킨뒤 Json 데이터만 변경하여 테스트 하거나 많은 데이터를 관리하는데 사용하면 좋을 것 같습니다.