팀프로젝트
SaveGame은 게임을 껐다 켜도 남아 있어야 하는 데이터를 저장하는 기능
언리얼에서 GameInstance는 레벨이 바뀌어도 살아있지만 게임을 완전히 종료하면 사라진다. 반면 SaveGame은 프로젝트 '파일/Saved/SaveGames' 디스크에 .sav파일로 저장된다.
현재 프로젝트에서 저장한 정보들은
// 총 킬 수 -> 맵 해금하는데 사용
UPROPERTY()
int32 totalKillCount;
// 플레이어 골드 -> 특성 해금 , 무기 해금에 사용
UPROPERTY()
int32 playerGold;
// 마우스 감도 설정
UPROPERTY()
float mouseSensitivity;
// 소리 설정
UPROPERTY()
float masterVolume;
Save
-> UGameplayStatics::SaveGameToSlot(saveGameObject, slotName, userIndex);
Load
-> UGameplayStatics::LoadGameFromSlot(slotName, userIndex);
저장 파일 확인
-> UGameplayStatics::DoesSaveGameExist(slotName, userIndex);
SaveGameToSlot(saveGameObject, slotName, userIndex);
언리얼 SaveGame은 저장할때 그냥 저장하지 않는다.
slotName -> 저장 파일 이름
userIndex -> 몇 번째 유저의 저장 파일인지 구분하는 번호
저장파일을 찾기 위한 주소이자, 이 둘을 합쳐서 어떤 저장 파일을 쓸 것인가를 결정한다.
몇 번째 유저의 저장 데이터인지 구분하는 번호
보통 PC 싱글 게임에서는 그냥 0을 사용
constexpr은 컴파일할 때 값이 확정되는 상수이다.
SaveGame에서 constexpr이 자주 쓰이는 이유는, 저장에 필요한 기본값이나 Slot 이름 같은 코드를 다른 곳에서 직접 쓰기 싫어서이다.
cosnt는 값을 바꿀 수 없게 만드는 뜻이다. 그런데 const는 꼭 컴파일 시간에 값이 정해져야 하는 건 아닌다.
즉 값을 나중에 바꿀 수는 없지만, 값 자체는 실행 중에 입력받아서 정해진다.
constexpr는 const보다 더 강하다. 단순히 값을 못 바꾸는게 아니라, 컴파일할 때 이미 값이 확정되어야 한다는 뜻이다.