
스프레드 시트를 이용하여 소비 아이템 데이터를 JSON으로 변환한 뒤 게임에 적용했다.

using Newtonsoft.Json;
using TextRPG.Scripts;
namespace TextRPG
{
struct PlayerDatas // Json에 저장할 플레이어 데이터 구조체
{
public Player player;
public List<EquipItem> shopItems;
public List<(string QuestType, int QuestNumber, int CurrentProgress)> questSave;
public PlayerDatas()
{
player = GameManager.instance.Player;
shopItems = ItemDataManager.instance.ShopEquipItems;
}
}
//24.05.03 데이터 로드 방식 변경 - C
public Player Load(string name)
{
string equipItemJsonFilePath = Path.Combine(path, @"..\\..\\..\\SaveData\\EquipItemData.json");
string consumableJsonFilePath = Path.Combine(path, @"..\\..\\..\\SaveData\\ConsumableItemData.json");
string saveDirectory = $"{path}\\\\SaveSlot";
string playerFile = Path.Combine(saveDirectory, "PlayerData.json");
// 전체 아이템 데이터 불러오기
string equipItemJsonData = File.ReadAllText(equipItemJsonFilePath);
string consumableItemJsonData = File.ReadAllText(consumableJsonFilePath);
// DB 적용
ItemDataManager.instance.SetItemDB(JsonConvert.DeserializeObject<List<EquipItem>>(equipItemJsonData),
JsonConvert.DeserializeObject<List<ConsumableItem>>(consumableItemJsonData));
if (name == "") // 불러오기 승낙한 경우
{
// 데이터가 존재한다면 해당 데이터를 읽어옴
string playerJsonData = File.ReadAllText(playerFile);
// PlayerDatas 구조체로 역직렬화해서 텍스트를 데이터로 변환
PlayerDatas playerData = JsonConvert.DeserializeObject<PlayerDatas>(playerJsonData);
// 불러온 플레이어 정보 저장
ItemDataManager.instance.SetShopItems(playerData.shopItems);
return playerData.player;
}
else // 불러오기 거절 또는 새로운 플레이어인 경우
{
// 기본 데이터로 초기화
ItemDataManager.instance.Init();
//새 플레이어 객체 생성
Player newPlayer = new Player(name);
//QuestSave 초기화
GameManager.instance.QuestManager.QuestSave[0] = (QuestType: "story", QuestNumber: 0, CurrentProgress: -1);
GameManager.instance.QuestManager.QuestSave[1] = (QuestType: "monster", QuestNumber: 0, CurrentProgress: -1);
GameManager.instance.QuestManager.QuestSave[2] = (QuestType: "storyLog", QuestNumber: -1, CurrentProgress: 0);
GameManager.instance.QuestManager.QuestSave[3] = (QuestType: "monsterLog", QuestNumber: -1, CurrentProgress: 0);
return newPlayer;
}
}
}
}