본문 바로가기

Unity/Unity 스파르타

4주차, 플레이어의 데이터 저장하기, 불러오기

728x90

플레이어의 데이터파일 저장하고 불러오기 

 

1. 시작

2. 파일 저장하기

3. 파일 로드하기

 

1. 시작

Nuget 관리에서 Newtonsoft.Json을 찾아 인스톨 해줍니다.

그리고 json으로 파싱할 곳에 using 으로 Newtonsoft.Json을 참조해 줍니다.

 

Newtonsoft.Json란 ?

더보기

JSON 데이터를 처리하는 데 사용되는 라이브러리입니다. 이 라이브러리는 JSON 데이터를 직렬화(객체를 JSON 문자열로 변환)하고 역직렬화(JSON 문자열을 객체로 변환)하는 기능을 제공하여 데이터를 간편하게 주고받을 수 있도록 도와줍니다.

2. 파일 저장하기

더보기

직렬화(Serialization)는 객체를 데이터 스트림이나 바이트 배열과 같은 형태로 변환하는 과정을 말합니다. 이렇게 변환된 데이터는 저장이나 전송을 위해 사용될 수 있습니다. 주로 객체를 파일에 저장하거나 네트워크를 통해 전송할 때 사용됩니다.

 

역직렬화(Deserialization)는 직렬화된 데이터를 다시 객체로 변환하는 과정을 말합니다. 직렬화된 데이터를 역직렬화하여 객체로 복원하면, 원래의 객체 상태를 재현할 수 있습니다. 역직렬화를 위해서는 직렬화된 데이터와 동일한 클래스 구조가 필요합니다.

현재 가지고있는 플레이어 데이터를 Json으로 파싱해 지정한 폴더에 json 파일로 저장해 줄 것 입니다.

  • Directory.GetCurrentDirectory() 는 현재 실행 중인 프로세스의 작업 디렉토리(현재 작업 경로)를 반환하는 메서드 입니다. 
  • Path.Combine() 으로 디렉토리에 폴더 경로를 넣어줍니다.
  • 폴더 경로에 폴더가 존재하는지 확인후 없다면 폴더를 하나 새로 만들어 줍니다. 
    • (Mac)파일 경로 복사 : 파일 또는 폴더를 클릭후 [option] + [command] + c 하면 해당 파일 또는 폴드의 경로를 복사합니다.
  • JsonConvert.SerializeObject()로 저장할 객체 데이터를 json으로 파싱해줍니다.
  • File.WriteAllText() 지정한 폴더에 원하는 파일명으로 json파일을 저장해 줍니다.
 	 void SaveData()
        {
            string currentDirectory = Directory.GetCurrentDirectory();
            string saveDataFolderPath = Path.Combine(currentDirectory, "SaveData");
            if (!Directory.Exists(saveDataFolderPath))
            {
                Directory.CreateDirectory(saveDataFolderPath);
            }
            string json = JsonConvert.SerializeObject(player);
            File.WriteAllText(saveDataFolderPath + "/saveData.json", json);

        }

3. 파일 로드하기

  • 위와 똑같이 세이브파일을 저장해논 경로를 찾고 Path.Combine() 로 세이브폴더 경로를 연결해 줍니다.
  • File.Exists() 세이브 폴더안에 세이브데이터가 존재하는지 확인합니다.
  • 파일이 존재한다면 File.ReadAllText()로 해당 파일을 읽어옵니다.
  • 새로운 플레이어를 만들어주고 역직렬화를 통해 json 파일을 객체로 변환해줍니다.
  • 기존의 플레이어에 덮어씌워줍니다.
	void LoadData()
        {
            string currentDirectory = Directory.GetCurrentDirectory();
            string saveDataFolderPath = Path.Combine(currentDirectory, "SaveData");
            if (File.Exists(saveDataFolderPath + "/saveData.json"))
            {
                string json = File.ReadAllText(saveDataFolderPath + "/saveData.json");
                Player loadPlayer = JsonConvert.DeserializeObject<Player>(json);
                player = loadPlayer;
                GreenText("데이터 로드 완료.");
                Console.WriteLine();

            }
            else
            {
                RedText("저장된 데이터가 없습니다.");
                Console.WriteLine();
            }

        }
728x90