即使导出引擎中的场景,导出游戏时场景也不会改变

时间:2018-11-25 14:15:27

标签: c# unity3d

使用小型视频游戏的统一性,在引擎中完全可以更改级别,但是当我将其导出到.exe时,它是行不通的。游戏本身可以在.exe中正常运行,只有级别更改不起作用

public KeyCode nextLevelKey;

if(Input.GetKeyDown(nextLevelKey) && gameOver == true)
    {
        SceneManager.LoadScene(nextLevel.name);
        Debug.Log("loaded next level");
    }

关于为什么导出时不起作用的任何想法? 在构建时,我以正确的顺序包含了每个场景,所以不是那样。

2 个答案:

答案 0 :(得分:1)

好的,所以我看了一个统一的答案,发现了这一点:

https://answers.unity.com/questions/139598/setting-variable-as-type-quotscenequot.html 还有这个:

https://answers.unity.com/questions/205742/adding-scene-to-build.html

编辑方式: 我猜人们在第二个链接中尝试过的是使用自定义编辑器脚本!您可以保留Object nextLevel字段,还添加字符串nextLevelName;。 然后使用OnValidate()或其他某个Editor事件,可以在nextLevel的值更改时设置nextLevelName的值,而改用SceneManager.Load(nextLevelName)。

Kinda更简单的方法:尝试将该字段转换为字符串,要两次(或更多次)更新场景名称是很痛苦的,但是无论如何都可以解决。 为了使事情更顺利,您可以尝试这样,尽管我不确定将nextLevel作为变量要达到什么目的,但是您可以尝试:

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1)

或者您可以有一个Scenes类,该类提供一种处理nextLevel问题的方法。也许有令牌?也许还有其他事情。

public class Scenes
{
    public static string[,] scenes = new string[,]{
        {"first_level", "scene-1-name"},
        {"level_2", "scene-2-name"},
        {"level_3", "factory-level"},
        {"level_4", "scene-4-name"},
        {"level_5", "jungle"},
    };
    public static string GetSceneNameByToken(string token)
    {
        for (var i = 0; i < scenes.GetLength(0); i++)
            if (scenes[i, 0] == token)
                return scenes[i, 1];
        return null;
    }
}

我个人喜欢第二种方法,因为第一个方法还是一个不可靠的imo(特别是如果您要在项目中间或下一个项目中更改统一版本的话),也许这是因为我没有使用过idk的Editor Events。 / p>

答案 1 :(得分:0)

好,所以我知道了。我没有将nextLevel变量设置为Object,而是将其设置为字符串,然后在该对象(用于更改级别的代码已附加到该对象)中输入了级别名称。