【发布时间】:2021-04-04 12:34:38
【问题描述】:
我想用二进制形式保存数据,但它不起作用并显示 > 你知道是什么问题吗?
这是我的 > 脚本的一些部分:
public class DataManager : MonoBehaviour {
private string dataPath;
public void Initialize() {
dataPath = Application.persistentDataPath + "/gameData.dat";
}
public void Save(GameData gameData) {
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(dataPath);
GameData data = new GameData();
data.level = gameData.level;
data.hp = gameData.hp;
data.mp = gameData.mp;
data.damage = gameData.damage;
data.exp = gameData.exp;
data.maxExp = gameData.maxExp;
data.equipItem = gameData.equipItem;
bf.Serialize(file, data);
file.Close();
}
下面是 > 脚本的一些部分:
public class GameManager : MonoBehaviour {
private static GameManager m_instance;
public static GameManager instance {
get {
if (m_instance == null) {
m_instance = FindObjectOfType<GameManager>();
}
return m_instance;
}
}
private DataManager dataManager;
public GameData gameData;
public event Action levelUp;
public bool isPlayerDead { get; private set; }
public void Awake() {
if (instance != this) {
Destroy(gameObject);
}
dataManager = GetComponent<DataManager>();
dataManager.Initialize();
LoadGameData();
levelUp += UpdateMaxExp;
levelUp += UpdateMaxHp;
levelUp += UpdateMaxMp;
levelUp += UpdateLevel;
FindObjectOfType<PlayerHealth>().onDeath += PlayerDeath;
}
public void SaveGameData() {
dataManager.Save(gameData);
}
public void OnApplicationQuit() {
SaveGameData();
}
这是 GameData 脚本:
namespace DataInfo {
[System.Serializable]
public class GameData {
public int level = 1;
public float hp = 100f;
public float maxHp = 100f;
public float mp = 100f;
public float maxMp = 100f;
public float damage = 25f;
public float exp = 0f;
public float maxExp = 100;
public List<Item> equipItem = new List<Item>();
}
}
【问题讨论】:
-
你能展示一下
GameData的实现吗? -
@derHugo 是的,我添加了它。
标签: c# unity3d serialization save