📝 23.12.14
DataManager.cs 스크립트 뿐만 아니라 GameManager.cs, 그 외 수많은 스크립트를 수정해야 하는 작업이라 천천히 진행해보아야 할 것 같다.
일단 기존의 스크립트들이다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.IO;
[System.Serializable]
public class SaveData
{
public int gold;
public int atmosphere;
public int dead;
public bool[] haveWeakness = new bool[4];
public bool[] employTalents = new bool[4];
public int[] TalentVisited = new int[4];
public int employCommoner;
public int getClues;
public int Days;
public bool TodayVisited;
public bool eventAcrobat;
public bool eventAlchem;
}
public class DataManager : MonoBehaviour
{
string path;
// Start is called before the first frame update
void Start()
{
path = Path.Combine(Application.dataPath, "database.json");
//JsonLoad();
}
// Update is called once per frame
public void JsonLoad()
{
SaveData saveData = new SaveData();
if(!File.Exists(path))
{
GameManager.instance.playerGold = 6000;
GameManager.instance.townAtmosphere = 0;
GameManager.instance.townDead = 0;
GameManager.instance.haveDismissal = false;
GameManager.instance.haveWanted = false;
GameManager.instance.haveRock = false;
GameManager.instance.haveDrug = false;
GameManager.instance.employKnight = false;
GameManager.instance.employMercenary = false;
GameManager.instance.employAcrobat = false;
GameManager.instance.employAlchem = false;
GameManager.instance.KnightVisited = 0;
GameManager.instance.MercenaryVisited = 0;
GameManager.instance.AlchemVisited = 0;
GameManager.instance.AcrobatVisited = 0;
GameManager.instance.employCommoner = 0;
GameManager.instance.showCommoner = 0;
GameManager.instance.getClues = 0;
GameManager.instance.Days = 1;
GameManager.instance.TodayVisited = false;
GameManager.instance.eventAcrobat = false;
GameManager.instance.eventAlchem = false;
Debug.Log("세이브 파일이 없습니다.");
JsonSave();
} else
{
string loadJson = File.ReadAllText(path);
saveData = JsonUtility.FromJson<SaveData>(loadJson);
if(saveData != null)
{
GameManager.instance.playerGold = saveData.gold;
GameManager.instance.townAtmosphere = saveData.atmosphere;
GameManager.instance.townDead = saveData.dead;
GameManager.instance.haveDismissal = saveData.haveWeakness[0];
GameManager.instance.haveWanted = saveData.haveWeakness[1];
GameManager.instance.haveRock = saveData.haveWeakness[2];
GameManager.instance.haveDrug = saveData.haveWeakness[3];
GameManager.instance.employKnight = saveData.employTalents[0];
GameManager.instance.employMercenary = saveData.employTalents[1];
GameManager.instance.employAcrobat = saveData.employTalents[2];
GameManager.instance.employAlchem = saveData.employTalents[3];
GameManager.instance.KnightVisited = saveData.TalentVisited[0];
GameManager.instance.MercenaryVisited = saveData.TalentVisited[1];
GameManager.instance.AcrobatVisited = saveData.TalentVisited[2];
GameManager.instance.AlchemVisited = saveData.TalentVisited[3];
GameManager.instance.employCommoner = saveData.employCommoner;
GameManager.instance.showCommoner = 0;
GameManager.instance.getClues = saveData.getClues;
GameManager.instance.Days = saveData.Days;
GameManager.instance.TodayVisited = saveData.TodayVisited;
GameManager.instance.eventAcrobat = saveData.eventAcrobat;
GameManager.instance.eventAlchem = saveData.eventAlchem;
SceneManager.LoadScene("MainScene");
}
}
}
public void JsonSave()
{
SaveData saveData = new SaveData();
saveData.gold = GameManager.instance.playerGold;
saveData.atmosphere = GameManager.instance.townAtmosphere;
saveData.dead = GameManager.instance.townDead;
saveData.haveWeakness[0] = GameManager.instance.haveDismissal;
saveData.haveWeakness[1] = GameManager.instance.haveWanted;
saveData.haveWeakness[2] = GameManager.instance.haveRock;
saveData.haveWeakness[3] = GameManager.instance.haveDrug;
saveData.employTalents[0] = GameManager.instance.employKnight;
saveData.employTalents[1] = GameManager.instance.employMercenary;
saveData.employTalents[2] = GameManager.instance.employAcrobat;
saveData.employTalents[3] = GameManager.instance.employAlchem;
saveData.TalentVisited[0] = GameManager.instance.KnightVisited;
saveData.TalentVisited[1] = GameManager.instance.MercenaryVisited;
saveData.TalentVisited[2] = GameManager.instance.AcrobatVisited;
saveData.TalentVisited[3] = GameManager.instance.AlchemVisited;
saveData.employCommoner = GameManager.instance.employCommoner;
saveData.getClues = GameManager.instance.getClues;
saveData.Days = GameManager.instance.Days;
saveData.TodayVisited = GameManager.instance.TodayVisited;
saveData.eventAcrobat = GameManager.instance.eventAcrobat;
saveData.eventAlchem = GameManager.instance.eventAlchem;
string json = JsonUtility.ToJson(saveData, true);
File.WriteAllText(path, json);
Debug.Log("저장 완료");
Debug.Log(json);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager instance;
public int playerGold;
public int townAtmosphere;
public int townDead;
public bool haveDismissal; //해임서 들고 있음
public bool haveWanted;
public bool haveRock;
public bool haveDrug;
public bool employKnight;
public bool employMercenary;
public bool employAcrobat;
public bool employAlchem;
//방문 여부 0 -> 첫방문 / 1 -> 고용 후 재방문 / 2 -> 골드부족으로 미고용 후 재방문
// 3 -> 방문 불가 / 4 -> 재고용됨 / 5 -> 사망함
public int KnightVisited;
public int MercenaryVisited;
public int AcrobatVisited;
public int AlchemVisited;
public int employCommoner;
public int showCommoner;
public int getClues;
public int Days;
public bool TodayVisited;
public bool eventAcrobat;
public bool eventAlchem;
void Start()
{
//GameObject inven = GameObject.Find("go_InventoryBase");
//inven.SetActive(false);
}
void Awake()
{
instance = this;
}
}
가장 주된 문제는 GameManager 에서 사용되는 변수 형태와 json 파일에 저장되는 형태가 통일되지 않은 것이다. 이를 통일하기 위해서는 GameManager의 대대적인 변화가 필요할 것 같다. 좀 더 정리된 상태를 구상해보아야 할 것 같다.
또한 현재는 가장 최근의 파일만 저장할 수 있게 되어있는데, 저장 슬롯을 추가하는 것도 고려해보겠다.