그동안 Unity로만 데이터를 저장하고 로드하는 방법, XML을 이용한 저장하는 방법 대해 배웠는데
Text RPG를 제작하면서 Visual Studio를 통해 Json을 사용하는 방법에 대해 배울 수 있었다.
데이터를 저장하고 로드하는건 쉬운 것 같으면서도 아직까지 어려운 것같아 구현에 성공한 내용을 정리하려고 한다.
또 유니티를 통한 Json 방법은 이전에 정리했는데 이번에 적용한 Json 방식과 크게 다르지 않는 것 같다.
🔷 Visual Studio Json 사용법
1. Visual Studio 창에서 프로젝트 - NuGet 패키지 관리 선택
2. NewtonsSoft.Json 패키지 검색 후 설치
3. using Newtonsoft.Json; 문 작성 후 사용
파일경로 지정
private string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "playerData.json");
▪Environment.GetFolerPath : 특수한 폴더의 경로를 구할 수 있는 정적 메서드
▪Envionment.SpecialFolder : 파일 경로에 대한 열거형 인수를 받는다.
🔸 열거형의 종류
▪ Environment.SpecialFolder.Desktop : 바탕화면 폴더
▪ Environment.SpecialFolder.MyDocuments : 내 문서 폴더
▪ Environment.SpecialFolder.ProgramFiles : 프로그램 파일 폴더
▪ Environment.SpecialFolder.Windows : Windows 폴더
▪ Envionment.SpecialFolder.System : 시스템 폴더
5가지의 종류가 있으며 그 중 MyDocuments를 사용하여 파일 경로를 지정해주었다.
MyDocuments의 경우 C:\Users\Username\Documents 의 경로에 파일이 저장이 된다.
🔷 파일 저장하기
버튼을 눌렀을 때 지금까지 플레이어의 정보들을 저장할 수 있도록 구현했다.
public void SaveGameData(Player player)
{
string _playerJson = JsonConvert.SerializeObject(player, Formatting.Indented);
File.WriteAllText(fileName, _playerJson);
Console.WriteLine("저장이 완료되었습니다.");
Thread.Sleep(2000);
}
💡 직렬화(Serialize)
외부의 시스템에서 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술
코드 내의 객체나 해시테이블, 딕셔너리 등을 Json으로 변환하는 과정을 의미
◾ JsonConvert.SerializeObject(object, Formatting) : 문자열 또는 파일에 Json를 이용하려면 해당 메서드를 호출한다.
첫번째 인자 object 에선 직렬화할 객체, 두번째 인자 Formatting은 형식 지정 옵션 전달
◾ File.WriteAllText(string, string) : 새 파일을 만들고 파일에 내용을 쓴 다음 파일을 닫음
첫 게임을 실행했을 때 나오는 선택지에서 이어서하기를 누를 경우 저장된 파일을 로드 할 수 있도록 구현했다.
💡 역직렬화
외부 시스템의 바이트 형태의 데이터를 객체나 해시테이블, 딕셔너리 등으로 변환하는 것을 의미
🔷 파일 불러오기
public Player LoadGameData()
{
//저장 예외처리
try
{
if(!File.Exists(fileName))
{
Console.WriteLine("저장된 파일이 없습니다.");
return null;
}
string playerJson = File.ReadAllText(fileName);
Player player = JsonConvert.DeserializeObject<Player>(playerJson);
Console.WriteLine("저장된 파일을 불러왔습니다.");
Thread.Sleep(2000);
return player;
}
catch(Exception e)
{
TextWriter errorWriter = Console.Error;
errorWriter.WriteLine("데이터 로드 중 오류가 발생하였습니다. : " + e.Message );
return null;
}
}
◾ JsonConvert.DeserializeObject<object>(string) : 문자열 또는 파일에서 역직렬화하려면 해당 메서드를 호출한다.
<object>변환할 객체의 형식 , 두번째 인자는 Json 문자열
◾ File.Exists(파일 경로): 지정된 파일이 있는지 확인하여 Bool값을 반환
◾ File.ReadAllText(파일 경로) : 지정된 파일을 열고 파일의 모든 텍스트를 문자열로 읽은 후 파일을 닫음
Json 파일 확인
이전에 적용해봤던 Unity의 Json 방식과 크게 다르지 않아 좀 더 빠르게 이해할 수 있었고 몇 번 더 사용을 하다보면 제대로 이해하고 사용할 수 있을 것 같다..! 어떻게 하는 건지 모르겠다고 넘어갔던 부분을 직접 구현해면서 이해하기 수월한것 같다!
참고 사이트
'Unity > 개념 공부' 카테고리의 다른 글
[ 내일배움캠프 ] TIL.14 - 추상 클래스와 추상 메서드 ( Abstract ) (0) | 2024.05.02 |
---|---|
[ 내일배움캠프 ] WIL.10 - C# 기초 & 개인 프로젝트 진행 (0) | 2024.04.26 |
[ 내일배움캠프 ] TIL.06 - C# 문법 종합반 2주차 강의_숙제 (0) | 2024.04.22 |
[ 내일배움캠프 ] TIL.06 - C# "개체 참조가 필요합니다." (0) | 2024.04.22 |
[ 내일배움캠프 ] TIL.06 - C# 문법 종합반 1주차 강의_숙제 (0) | 2024.04.22 |