구현 기간 : 07.11 ~ 07.12
게임 플레이어 데이터를 세이브하여 종료하더라도 이어할 수 있도록 구현한다.
현재 프로젝트에서 모든 데이터는 GameManager
의 GameData
에서 관리했기 때문에 GameData
를 Save
하면 된다.
저장 데이터
- 기본 데이터 (레벨, 체력, 마나 등..)
- 인벤토리
- 장비
- 퀘스트
- 스킬
- 커스텀 부위
- 그 외 장착 아이템, 스킬들
🎮 구현 기능
1
2
3
4
5
6
7
8
string _savePath = $"{Application.persistentDataPath}/SaveData.json";
public void SaveGame()
{
string jsonStr = JsonUtility.ToJson(GameData, true);
File.WriteAllText(_savePath, jsonStr);
}
GameData
는 json
으로 파싱하여 저장한다.
하지만 이대로 실행하여 파일을 확인해 보면 Dictionary
를 사용한 데이터들이 없는 것을 알 수 있다.
현재 사용하는 JsonUtility
는 Dictionary
를 변환할 수 없기 때문에 직접 List
를 만들어 저장해줘야 한다.
구글링을 통해 (Unity) Dictionary를 Json 데이터로 파싱하기!를 참고하여 Dictionary
데이터를 json
으로 원활하게 파싱할 수 있었다.
💡 참고
json
으로 파싱하고 파일을 확인해보면 GameObject
, Mesh
, Sprite
등.. 의 복잡한 정보는 instanceID
로 저장된 것을 알 수 있다.
이러한 정보는 내가 겪어본 바로 유니티를 껐다 키거나 어느 정도 시간이 지나면 바뀌게 된다.
그러므로 instanceID
는 되도록 string
이름으로 저장하여 Load
할때 불러오는 것이 좋다.