20206-05-13 SaveGame, constexpr, SaveGameToSlot

조범근·2026년 5월 13일

TIL

목록 보기
59/81

C++ Week 11

Study

팀프로젝트



Today I Learned


UnrealC++

1. SaveGame

SaveGame게임을 껐다 켜도 남아 있어야 하는 데이터를 저장하는 기능

언리얼에서 GameInstance는 레벨이 바뀌어도 살아있지만 게임을 완전히 종료하면 사라진다. 반면 SaveGame은 프로젝트 '파일/Saved/SaveGames' 디스크에 .sav파일로 저장된다.

현재 프로젝트에서 저장한 정보들은

// 총 킬 수 -> 맵 해금하는데 사용
UPROPERTY()
int32 totalKillCount;

// 플레이어 골드 -> 특성 해금 , 무기 해금에 사용
UPROPERTY()
int32 playerGold;

// 마우스 감도 설정 
UPROPERTY()
float mouseSensitivity;

// 소리 설정
UPROPERTY()
float masterVolume;

1-1 SaveGame 기본 흐름

  1. SaveGame 클래스 만들기
  2. 저장할 변수 선언
  3. 저장 파일이 있는지 확인
  4. 있으면 Load
  5. 없으면 Create
  6. 값 변경
  7. SaveGameToSlot으로 저장

Save
-> UGameplayStatics::SaveGameToSlot(saveGameObject, slotName, userIndex);

Load
-> UGameplayStatics::LoadGameFromSlot(slotName, userIndex);

저장 파일 확인
-> UGameplayStatics::DoesSaveGameExist(slotName, userIndex);

1-2 SaveGameToSlot

SaveGameToSlot(saveGameObject, slotName, userIndex);

언리얼 SaveGame은 저장할때 그냥 저장하지 않는다.

slotName -> 저장 파일 이름
userIndex -> 몇 번째 유저의 저장 파일인지 구분하는 번호
저장파일을 찾기 위한 주소이자, 이 둘을 합쳐서 어떤 저장 파일을 쓸 것인가를 결정한다.

1-3 UserIndex

몇 번째 유저의 저장 데이터인지 구분하는 번호

보통 PC 싱글 게임에서는 그냥 0을 사용



2. constexpr

constexpr컴파일할 때 값이 확정되는 상수이다.

SaveGame에서 constexpr이 자주 쓰이는 이유는, 저장에 필요한 기본값이나 Slot 이름 같은 코드를 다른 곳에서 직접 쓰기 싫어서이다.

const, constexpr차이점은?

const

cosnt는 값을 바꿀 수 없게 만드는 뜻이다. 그런데 const는 꼭 컴파일 시간에 값이 정해져야 하는 건 아닌다.

즉 값을 나중에 바꿀 수는 없지만, 값 자체는 실행 중에 입력받아서 정해진다.

constexpr

constexpr는 const보다 더 강하다. 단순히 값을 못 바꾸는게 아니라, 컴파일할 때 이미 값이 확정되어야 한다는 뜻이다.

0개의 댓글