using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
[System.Serializable]
public class StageType
{
}
[System.Serializable]
public class GameData
{
[Header("스테이지 클리어 여부")]
public bool[] bClearStage = new bool[20]; //클리어 할 때 마다 저장
public bool[] bStar1Stage = new bool[20];
public bool[] bStar2Stage = new bool[20];
public bool[] bStar3Stage = new bool[20];
}
[System.Serializable]
public class ItemData
{
public List<int> invenArrayNumber = new List<int>();
public List<string> invenItemName = new List<string>();
public List<int> invenItemNumber = new List<int>();
}
[System.Serializable]
public class PlayerData
{
[Header("플레이어 데이터")]
public int iLevel;
public int iReqLevelExp;
public int iDollar; //일반 재화
public int iBitCoin; //특수 재화
public int iExp; //경험치
//아이템 추가해 둘 것
}
[System.Serializable]
public class OptionData
{
[Header("옵션 저장")]
public float MasterValue;
public float MasterPrevValue;
public float BGMValue;
public float BGMPrevValue;
public float BGEValue;
public float BGEPrevValue;
public float EffectValue;
public float EffectPrevValue;
public bool MasterMute;
public bool BGMMute;
public bool BGEMute;
public bool EffectMute;
}
public class DataController : MonoBehaviour
{
public SoundMaster m_SM;
public GameInfo m_GI;
public GameData m_GameData;
public ItemData m_ItemData;
public PlayerData m_PlayerData;
public OptionData m_OptionData;
private static DataController instance = null;
private void Awake()
{
if(null == instance)
{
//이 클래스 인스턴스가 탄생할 때 전역변수 instance에 인스턴스가 담기지 않으면 자기를 넣는다.
instance = this;
//씬 전환되도 파괴되지 않게 막는다.
DontDestroyOnLoad(this.gameObject);
}
else
{
//씬 이동 후에도 그 씬의 헤이라키에 존재할 경우엔 삭제시켜 줄인다.
Destroy(this.gameObject);
}
LoadGameDataFromJson();
LoadPlayerDataFromJson();
LoadOptionDataFromJson();
}
public static DataController Instance
{
get
{
if(null==instance)
{
return null;
}
return instance;
}
}
[ContextMenu("To Json GameData")]
public void SaveGameDataToJson() //게임 데이터 세이브 지점
{
string jsonData = JsonUtility.ToJson(m_GameData, true);
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "GameData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "GameData.json");
#endif
File.WriteAllText(path, jsonData);
}
[ContextMenu("From Json GameData")]
public void LoadGameDataFromJson() //게임데이터 로드
{
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "GameData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "GameData.json");
#endif
if (File.Exists(path))
{
Debug.Log("gamedata Load");
string jsonData = File.ReadAllText(path);
m_GameData = JsonUtility.FromJson<GameData>(jsonData);
}
else
{
Debug.Log("new gamedata");
m_GameData = new GameData();
}
}
[ContextMenu("To Json ItemData")]
public void SaveItemDataToJson()
{
string jsonData = JsonUtility.ToJson(m_ItemData, true);
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "ItemData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "ItemData.json");
#endif
File.WriteAllText(path, jsonData);
}
[ContextMenu("From Json GameData")]
public void LoadItemDataFromJson() //게임데이터 로드
{
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "ItemData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "ItemData.json");
#endif
if (File.Exists(path))
{
Debug.Log("itemdata Load");
string jsonData = File.ReadAllText(path);
m_ItemData = JsonUtility.FromJson<ItemData>(jsonData);
}
else
{
Debug.Log("new gamedata");
m_ItemData = new ItemData();
}
}
[ContextMenu("To Json PlayerData")]
public void SavePlayerDataToJson()
{
string jsonData = JsonUtility.ToJson(m_PlayerData, true);
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "PlayerData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "PlayerData.json");
#endif
File.WriteAllText(path, jsonData);
}
[ContextMenu("From Json PlayerData")]
public void LoadPlayerDataFromJson()
{
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "PlayerData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "PlayerData.json");
#endif
if (File.Exists(path))
{
Debug.Log("playerdata Load");
string jsonData = File.ReadAllText(path);
m_PlayerData = JsonUtility.FromJson<PlayerData>(jsonData);
}
else
{
Debug.Log("new playerdata");
m_PlayerData = new PlayerData();
}
}
[ContextMenu("To Json OptionData")]
public void SaveOptionDataToJson()
{
string jsonData = JsonUtility.ToJson(m_OptionData, true);
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "OptionData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "OptionData.json");
#endif
File.WriteAllText(path, jsonData);
}
[ContextMenu("From Json OptionData")]
public void LoadOptionDataFromJson()
{
#if UNITY_EDITOR
string path = Path.Combine(Application.dataPath, "OptionData.json");
#elif UNITY_ANDROID
string path = Path.Combine(Application.dataPath, "OptionData.json");
#endif
if (File.Exists(path))
{
Debug.Log("optiondata Load");
string jsonData = File.ReadAllText(path);
m_OptionData = JsonUtility.FromJson<OptionData>(jsonData);
}
else
{
Debug.Log("new optionData");
m_OptionData = new OptionData();
}
}
}
이게 에디터에서는 잘 작동되는게 확인됐거든? 게임이 에러 없이 잘 작동했는데 apk로 패키징 해서 실행해서 세이브 지점에서 실행하면 계속 게임이 멈춰버리는 현상이 발견되서, 어떻게 해야할지 알려줄 수 있니?