어제 만들었던 PlayerPrefs를 이용해서 재시작을 했을 때 데이터가 잘 들어가는지 테스트 해보았습니다.
저장되는 데이터
저희 게임에서 저장이되야 되는 것들은 sectorCount와 playerHP 그리고 잠금이 해제된 unlockedWeapons 무기들의 정보였습니다.
어제는 PlayerPrefs와 JsonUtility를 이용하여 저장을 만들었다면 오늘은 이 저장된 데이터를 불러와 다시 로드해주는 작업을 하였습니다.
로드 데이터
저장된 데이터를 로드 해주는 함수는 GameManager가 가지고 있습니다.
public SaveData LoadLastData() { string saveDataJson = PlayerPrefs.GetString("SaveData", "{}"); saveData = SaveData.Deserialize(saveDataJson); return saveData; }
SaveData의 Deserialize함수를 통해 저장된 데이터를 역직렬화 해서 SaveData형태로 반환하는 함수입니다.
그리고 필요한 곳에 LoadLastData()를 호출하여 원하는 데이터들을 넣어 주는 작업을 하였습니다.
OnRetry
GameManager에
public event UnityAction onRetry;
이벤트를 선언한 후 RetryGame()함수가 불렸을 때 실행되도록 구현하였습니다.
public void RetryGame() { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; onRetry?.Invoke(); if (currentEvent == null) { currentSector.OnRetry(); } else { currentEvent.OnRetry(); } }
Sector나 Event에 OnRetry에는 LoadLastData로 sectorCount 정보를 다시 넣어 주었으며 onRetry에 연결되어있는 것은
Player의 Hp를 초기화 해주는 함수 플레이어가 가지고 있었던 무기 정보를 업데이트 해주는 함수를 연결시켜 주었습니다.
이렇게 플레이어의 HP나 Sector를 클리어 했을 때 해당 Sector의 sectorCount에 맞춰서 플레이어 위치가 바뀌는 것을 볼 수 있고 무기 정보도 저장됬다는 것을 알 수 있습니다.