[이후는 이전보다] 리뉴얼 - 4

김유원·2023년 12월 14일
0

📝 23.12.14

저장 스크립트 수정

DataManager.cs 스크립트 뿐만 아니라 GameManager.cs, 그 외 수많은 스크립트를 수정해야 하는 작업이라 천천히 진행해보아야 할 것 같다.

일단 기존의 스크립트들이다

DataManager.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);
    }
}

GameManager.cs

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의 대대적인 변화가 필요할 것 같다. 좀 더 정리된 상태를 구상해보아야 할 것 같다.

또한 현재는 가장 최근의 파일만 저장할 수 있게 되어있는데, 저장 슬롯을 추가하는 것도 고려해보겠다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보