首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PlayerPrefs等于GameObject

PlayerPrefs等于GameObject
EN

Stack Overflow用户
提问于 2017-02-01 15:33:26
回答 1查看 817关注 0票数 0

我正在使用c#代码开发一个统一的保存系统。我怎样才能获得这样的储蓄制度。

在我的空GameObject中,我有一个脚本,如下所示:

Counter.cs

代码语言:javascript
复制
public int counter;

这都在我的Counter.cs上。现在,如果它在GameObject中,我如何保存和获取它。我只想把柜台放在Counter.cs里面。

我能这样做吗。

SaveAndLoad.cs

代码语言:javascript
复制
public GameObject SaveCounter;

public void Save(){
    PlayerPrefs.SetInt("Player Score", SaveCounter);
}

public void Load(){
    PlayerPrefs.GetInt("Player Score"));
}

我能这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 15:51:13

回答你的问题

您不应该在PLAYER PREFS中存储与游戏状态相关的东西

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

代码语言:javascript
复制
[Serializable]
public class GameState
{
    int m_Score;

    public int Score 
    {
        get { return m_Score; }
        set { m_Score = value; }
    }
}

然后使用BinaryFormatter和某个助手对象将这些数据序列化为一个文件:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
public GameState CurrentProgress;

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

但是,如果您真的喜欢在PlayerPrefs中存储这类数据,那么仍然可以这样做:

代码语言:javascript
复制
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"));
}

这不是任何人推荐的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41983618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档