(3D RPG) 세이브
포스트
취소

(3D RPG) 세이브

구현 기간 : 07.11 ~ 07.12

게임 플레이어 데이터를 세이브하여 종료하더라도 이어할 수 있도록 구현한다.

현재 프로젝트에서 모든 데이터는 GameManagerGameData에서 관리했기 때문에 GameDataSave하면 된다.

저장 데이터

  1. 기본 데이터 (레벨, 체력, 마나 등..)
  2. 인벤토리
  3. 장비
  4. 퀘스트
  5. 스킬
  6. 커스텀 부위
  7. 그 외 장착 아이템, 스킬들

🎮 구현 기능

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);
}

GameDatajson으로 파싱하여 저장한다.

하지만 이대로 실행하여 파일을 확인해 보면 Dictionary를 사용한 데이터들이 없는 것을 알 수 있다.

현재 사용하는 JsonUtilityDictionary를 변환할 수 없기 때문에 직접 List를 만들어 저장해줘야 한다.

구글링을 통해 (Unity) Dictionary를 Json 데이터로 파싱하기!를 참고하여 Dictionary 데이터를 json으로 원활하게 파싱할 수 있었다.

💡 참고

json으로 파싱하고 파일을 확인해보면 GameObject, Mesh, Sprite 등.. 의 복잡한 정보는 instanceID로 저장된 것을 알 수 있다.

이러한 정보는 내가 겪어본 바로 유니티를 껐다 키거나 어느 정도 시간이 지나면 바뀌게 된다.

그러므로 instanceID는 되도록 string 이름으로 저장하여 Load할때 불러오는 것이 좋다.

🎬 구현 영상

SaveLoad

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.