【问题标题】:How to create a new save and load it?如何创建一个新的保存并加载它?
【发布时间】:2017-01-21 12:17:55
【问题描述】:

我正在尝试做的事情:

当我按下播放按钮时,会出现带有 + 的面板。我为 + 按钮做了一个简单的脚本

    public void addSave()
{
    if (i != 0)
    {
        File.Delete("Assets/Game1.unity");//If there is already a save then delete it
        i = 0;
    }
    if (i == 0)
    {
        File.Copy("Assets/Game.unity", "Assets/Game1.unity");//And copy the scene to make the new one.
        OpenSave.SetActive(true);
        i++;
    }
}

当我按下 时,它必须加载 Game1.unity,但它说:“场景 'Game1' 无法加载,因为它尚未添加到构建设置或 AssetBundle 尚未加载。 "那么如何将其添加到脚本中的构建设置中呢?

我找到了this,但我如何在游戏开始前制作一个新场景?

编辑:我已添加 Game1.unity 以手动构建设置,因此 + 按钮只会重置游戏。但也许有更好的方法来做到这一点?

或者也许有更好的方法来做到这一点?

【问题讨论】:

    标签: c# unity3d unity5 unity3d-2dtools


    【解决方案1】:

    您不应该使用场景来保存和加载游戏。实际上最好只使用主场景(Unity 场景系统又丑又慢)。

    您可以根据需要使用任何序列化方法,例如 xml、json、协议缓冲区或 Asset Store 中的那些。对于这类事情,序列化更加灵活和易于管理。

    【讨论】:

    • 所以我必须在文件中存储统计数据然后加载它们?
    • 是的,从序列化文件中读取数据并根据该文件构建地图或加载统计信息。您可以创建一个主菜单父对象并在加载地图后禁用它,这样您就不必加载新场景。几乎任何东西都可以通过这种方式存储。
    • 好的。谢谢。我会这样做的
    • 如果我有很多可以交互的项目(例如只更改纹理)我该怎么办我如何保存所有这些项目?我应该为他们制作布尔值并像那样存储它吗?
    • 我可能会为 ingame 对象的类型创建一个枚举,并使用组件模型编程来根据枚举添加该行为。例如,如果您有一个敌人对象,则在实例化时将敌人行为组件添加到该对象。搜索基于组件的编程以了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多