PlayerPrefs 等于 GameObject

PlayerPrefs Equal to GameObject

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

我可以这样做吗?

回答你的问题

你不应该在玩家偏好设置中存储游戏状态相关的东西

相反,您可以创建可序列化对象:

[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"));
}

任何人都不推荐。