-
[Unreal Engine] Save & Load (USaveGame)Unreal Engine 5._ 2023. 9. 24. 23:44
Unreal Engine은 기본적인 데이터 타입에 대한 Save & Load를 지원합니다.
이번 글에서는 데이터를 저장, 로드하는 기본적인 방법에 대해 살펴보도록 하겠습니다.
1. USaveGame 객체 만들기
더보기저장은 특정한 인스턴스 단위로 이루어집니다.
저장을 지원하는 인스턴스는 USaveGame클래스를 상속받은 객체입니다.
// ... UCLASS() class MYGAME_API UMySaveGame : public USaveGame { // ... public: UPROPERTY() int32 data; };
위와 같이 USaveGame을 상속받는 클래스의 필드는 Save & Load가 가능합니다.
2. 저장하기 : SaveGameToSlot
더보기USaveGame을 상속받는 클래스를 만들었으면, 해당 객체를 생성한 후 저장할 수 있습니다.
//... #include "Kismet/GameplayStatics.h" void AMyActor::Save() { UMySaveGame* tmp = Cast<UMySaveGame>( UGameplayStatics::CreateSaveGameObject(UMySaveGame::StaticClass())); tmp->data = this->data; UGameplayStatics::SaveGameToSlot(tmp, TEXT("MySave"), 0); }
해당 코드는 MyActor에서 데이터를 저장하는 예제 코드입니다.
해당 함수가 실행되었을 경우 /Saved/SaveGames 디렉토리에 MySave.sav 파일이 생성됩니다.
3. 로드하기 : LoadGameFromSlot
더보기저장한 데이터를 불러오는 코드는 다음과 같습니다.
//... #include "Kismet/GameplayStatics.h" bool AMyActor::Load() { UMySaveGame* tmp = Cast<UMySaveGame>( UGameplayStatics::LoadGameFromSlot(TEXT("MySave"), 0)); if(!tmp) return false; this->data = tmp->data; return true; }
LoadGameFromSlot함수는 첫 번째 인자로 전달한 문자열에 해당하는 sav파일을 찾습니다.
탐색하는 경로는 저장과 마찬가지로 /Saved/SaveGames 입니다.
로드에 성공했을 경우 해당 파일에 대한 데이터를 담고 있는 USaveGame포인터를 반환합니다.
로드에 실패했을 경우 nullptr을 반환합니다.
따라서, nullptr 예외처리와 함께 해당 데이터를 캐스팅 하는 과정을 거쳐야 합니다.
저장 및 로드 방법을 알아보았습니다.
기본적으로 제공하는 기능이 사용하기 편하게 고도화 되어있어, 개발에 많은 도움을 받았습니다.
다음 글에서는 해당 기능을 편하게 일반화 하는 방법을 다루도록 하겠습니다.
감사합니다.
'Unreal Engine 5._' 카테고리의 다른 글
[Unreal Engine] LuaMachine : 함수 중복 사용하기 (LuaComponent) (0) 2023.10.06 [Unreal Engine] USaveGame templatize (0) 2023.10.01 [Unreal Engine] LuaMachine : Android null pointer dereference (0) 2023.09.17 [Unreal Engine] CDO Constructor fail to find (0) 2023.09.06 [Unreal Engine] Solve : On mobile the SkyAtmosphere component needs a mesh with .... (1) 2023.09.06