gpt4 book ai didi

c# - 导出游戏时场景不会改变,即使它在引擎中也会改变

转载 作者:行者123 更新时间:2023-11-30 17:28:09 24 4
gpt4 key购买 nike

在小型视频游戏中使用 unity,更改关卡在引擎中完全可以正常工作,但是当我将其导出到 .exe 时,它​​就不起作用了。游戏本身在 .exe 中运行良好,只有关卡更改不起作用

public KeyCode nextLevelKey;

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

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

最佳答案

好的,所以我查看了 unity answers 并发现了这个:

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 字段也添加 string nextLevelName;然后使用 OnValidate() 或其他一些编辑器事件,您可以在 nextLevel 的值更改时设置 nextLevelName 值,并改用 SceneManager.Load(nextLevelName)。

比较简单的方法:尝试将该字段转换为字符串更新场景名称两次(或更多次)很痛苦,但无论如何都能解决问题。为了让事情变得顺利一些,你可以尝试这样的事情,虽然我不确定你试图通过将 nextLevel 作为变量来实现什么,但你可以尝试:

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

或者您可以有一个 Scenes 类,它提供了一种处理 nextLevel 问题的方法。也许用 token ?也许其他。

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;
}
}

我个人喜欢第二种方法,因为在我看来,第一种方法仍然有点不可靠(特别是如果你要在项目中间或下一个项目中更改统一版本)也许这是因为我没有太多地使用编辑器事件。

关于c# - 导出游戏时场景不会改变,即使它在引擎中也会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53468380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com