我正在使用c#代码统一使用保存系统。 我怎样才能获得这种储蓄系统。
在我的空GameObject
我有一个脚本,这里是:
Counter.cs
public int counter;
这一切都在我的Counter.cs上。现在,如果它在GameObject
内,我怎么能保存并获取它。我只想把计数器放在Counter.cs。
我可以这样做。
SaveAndLoad.cs
public GameObject SaveCounter;
public void Save(){
PlayerPrefs.SetInt("Player Score", SaveCounter);
}
public void Load(){
PlayerPrefs.GetInt("Player Score"));
}
我可以这样做吗?
答案 0 :(得分:2)
回答你的问题
你不应该在玩家PREFS中存储游戏状态相关的东西
相反,你可以制作可序列化的对象:
[Serializable]
public class GameState
{
int m_Score;
public int Score
{
get { return m_Score; }
set { m_Score = value; }
}
}
然后使用BinaryFormatter
和一些帮助对象将此数据序列化为文件:
public void StoreGameState(GameState state)
{
using (BinaryWriter writer = new BinaryWriter(File.OpenWrite("./gamestate.bin")))
{
var formatter = new BinaryFormatter()
formatter.Serialize(state, writer);
}
}
public GameState RestoreGameState()
{
using (BinaryReader reader = new BinaryReader(File.OpenRead("./gamestate.bin")))
{
var formatter = new BinaryFormatter()
return (GameState)formatter.Deserialize(reader);
}
}
然后将GameState
添加到您的空GameObject
:
public GameState CurrentProgress;
每当您想要保存或加载时,请阅读我发布的两种方法:StoreGameState
和RestoreGameState
。
但如果您真的要在PlayerPrefs
中存储这些类型的数据,那么您仍然可以这样做:
public GameObject SaveCounter;
public void Save(){
PlayerPrefs.SetInt("Player Score", SaveCounter.GetComponentn<Counter>().counter);
}
public void Load(){
SaveCounter.GetComponentn<Counter>().counter = PlayerPrefs.GetInt("Player Score"));
}
任何人都不推荐。