게임을 불러오기(load) 한 경우에는 인트로 Timeline이 실행되지 않고, 바로 플레이어와 UI가 등장하게 만들기
문제 상황
CameraIntroController.cs의 Start()에서 항상 director.Play()를 호출해서 인트로가 재생됨
"불러오기"를 눌러도 무조건 인트로 영상이 실행됨
해결 방법
1. 플래그 변수 추가
SaveManager.cs에 static 변수 추가
public static bool IsNewGame = true; // 새 게임 여부 판별
2. TitleUIManager.cs에서 상태 설정
새 게임이면 true, 불러오기면 false로 설정
public void OnClickNewGame()
{
SaveManager.IsNewGame = true; // ✅ 새 게임 시작
SaveManager.Instance.ResetData();
SaveManager.Instance.SaveData(new SaveData());
sceneFader.FadeToScene("GameScene");
}
public void OnClickLoadGame()
{
if (SaveManager.Instance.HasSavedData())
{
SaveManager.IsNewGame = false; // ✅ 불러오기 시작
SaveManager.Instance.LoadData();
sceneFader.FadeToScene("GameScene");
}
else
{
// 저장 데이터 없음 처리...
}
}
if (!SaveManager.IsNewGame)
{
var data = SaveManager.Instance.CurrentData;
if (data != null)
{
playerStatus.ApplySaveStatus(data);
clock.ApplySaveClock(data);
// 위치 복원
playerStatus.transform.position = new Vector3(
data.playerPosX,
data.playerPosY,
data.playerPosZ
);
}
}
4. 문제 해결 과정
SaveAll()이 자동 호출되지만 위치 저장이 되지 않던 문제 분석
이유: Start()에서 저장된 위치를 불러오지 않고 초기 위치 유지해서 저장되던 것
해결: IsNewGame을 기준으로 불러오기 시 위치를 직접 복원하도록 수정
체크포인트
SaveManager.IsNewGame 플래그를 활용하여 불러오기 시 인트로 생략 및 초기화 방지
SaveManager.Instance.CurrentData로 현재 세션 저장 데이터에 접근
느낀점
위치까지 저장하려면 단순히 저장만 하는 게 아니라, 불러와서 적용하는 과정도 반드시 짝을 맞춰야 함
구조적으로는 GameManager가 중심이 되어 상태 관리하는 구조가 깔끔하고 유지보수가 쉬움