PlayerPrefs等于GameObject

时间:2017-02-01 15:33:27

标签: c# unity5

我正在使用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"));
}

我可以这样做吗?

1 个答案:

答案 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;

每当您想要保存或加载时,请阅读我发布的两种方法:StoreGameStateRestoreGameState

但如果您真的要在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"));
}

任何人都不推荐。