TextRpg만들기 과제중 가장 마지막 도전과제인 게임을 껏다켜도 데이터가 저장되게 하라고 해서 JSON을 공부하게 되었음
해당 JSON에 관한 내용은 Unity에서도 자주 사용하게 될것으로 보이기도 해서 TIL로 작성하기로 채택~
다른글은 더이상 쓰지 않고 JSON을 사용하는데 필요한 코드들의 코드블럭과 주석으로 모든 설명을 하겠음
첫번째로 저장과 불러오는 기능을 해줄 메서드 및 클래스
public class SaveLoadSystem
{
//게임 데이터가 저장될 파일 경로를 지정
private static string filePath = "gameData.json";
//데이터 저장용 메서드
//저장을 위해선 ? GameData를 해당 메서드에 전달해줘야 그 내용을 저장할 수 있음
public static void SaveGame(GameData data)
{
// 데이터를 JSON형식으로 직렬화 하는 코드
//Formatting.Indented 이부분은 들여쓰기를 적용하는 "옵션"
string json = JsonConvert.SerializeObject(data, Formatting.Indented);
//위에서 직렬화 한 JSON데이터를 파일로 저장
File.WriteAllText(filePath, json);
// 출력 및 슬립을 줘서 사용자가 저장중인것을 인지시킴
Console.WriteLine("진행상황을 저장중입니다...");
Thread.Sleep(3000);
}
//데이터 불러오기용 메서드
public static GameData LoadGame()
{
//데이터 파일이 있는지 확인하고
if (File.Exists(filePath))
{
//JSON데이터를 문자열로 변환
string json = File.ReadAllText(filePath);
//JSON형식의 문자열을 GameData객체로 변환해주는 코드 (압축과 압축풀기로 이해하면 매우 쉬움)
GameData data = JsonConvert.DeserializeObject<GameData>(json);
Console.WriteLine("진행상황을 불러오는 중입니다...");
Thread.Sleep(3000);
//불러온 변환한 데이터를 반환해서 게임내에 반영
return data;
}
else
{
Console.WriteLine("불러올 파일이 없습니다.");
Thread.Sleep(3000);
return null;
}
}
}
그리고 게임 내에서 호출해서 사용할 저장 메서드
public void Save()
{
// GameData객체를 생성하고 현재 가지고있는 저장해야할 변수들을 넣어줌
GameData gameData = new GameData
{
level = level,
exp = exp,
liveHp = liveHp,
gold = gold,
Inventory = inventory.ToArray() // 리스트를 배열로 변환하여 저장 (리스트그대로 JSON화가 힘들다고 함)
};
//JSON화 하여 파일로 저장하는 메서드를 호출하고 GameData객체를 넣어줌
SaveLoadSystem.SaveGame(gameData);
}
다음은 불러오기용 메서드
public void Load()
{
//saveLoadSystem을 통해 저장된 데이터를 불러옴
GameData loadedData = SaveLoadSystem.LoadGame();
// 데이터가 들어있으면
if (loadedData != null)
{// loadedData안에 있는 값들을 변수들에 넣어줌
level = loadedData.level;
exp = loadedData.exp;
liveHp = loadedData.liveHp;
gold = loadedData.gold;
inventory = new List<Item>(loadedData.Inventory); // 배열을 리스트로 변환
}
}
이렇게 작성하고
저장이 필요한곳에 Save();
불러오기가 필요한곳에 Load();
나는 자동저장 및 불러오기를 하려다가 저장과 불러오기를 메인화면에 넣어놓고 사용자가 선택할수 있게 함
+ 수정사항
주의 !!이렇게만 작성한다고 json이 적용되는것이 아닙니다 !!
비쥬얼 스튜디오 2022기준 상단에 도구 > NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리... 클릭 후
찾아보기에서 Json을 검색 Newtonsoft.Json 클릭 원하는 프로젝트 클릭 하시고 설치
제 프로젝트에서 사용된 using 문은 아래와 같습니다.
using System;
using System.IO;
using System.Timers;
using System.Collections;
using System.Collections.Generic;
using System.Net.Security;
using Newtonsoft.Json;