使用小型视频游戏的统一性,在引擎中完全可以更改级别,但是当我将其导出到.exe时,它是行不通的。游戏本身可以在.exe中正常运行,只有级别更改不起作用
public KeyCode nextLevelKey;
if(Input.GetKeyDown(nextLevelKey) && gameOver == true)
{
SceneManager.LoadScene(nextLevel.name);
Debug.Log("loaded next level");
}
关于为什么导出时不起作用的任何想法? 在构建时,我以正确的顺序包含了每个场景,所以不是那样。
答案 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,而是将其设置为字符串,然后在该对象(用于更改级别的代码已附加到该对象)中输入了级别名称。