3

基本上,在测试了几个关卡原型之后,我决定坚持我目前的游戏理念,所以我开始创建一个 GameManager 来控制关卡的流程等。我没有任何额外的库或资产包在外面使用默认值,但由于某种原因,我所有场景的 buildIndex 都是-1,我根据 API 了解到,这意味着它们应该通过 AssetBundle 加载。现在我无法使用 SceneManager 加载任何内容,而且我不确定如何继续前进。我确实暂时在项目中有 2d-extras-master 文件夹,因为我认为我会使用它,但在意识到我不需要它之后将其删除。有谁知道如何将我的场景的 buildIndices 重置为 Build Settings 中的值?非常感谢任何/所有帮助!

编辑:我还应该提到,我添加的最新场景(当我仍然有 2d-extras-manager 时)仍然保持正常的 buildIndex 为 0

编辑#2:所以我发现我可以在它们之间访问其他场景的 buildIndices。只有当我尝试从 MainMenu 场景访问 buildIndices 时,事情才不起作用

编辑#3:我找到了解决方法,但不一定能回答问题。我发现如果我知道 buildIndex 是什么,我可以强制 LoadScene 函数工作,但如果我通过场景名称搜索它,它将返回 -1。

前任。

// where 1 is the buildIndex of Scene "Main" in BuildSettings
// works
SceneManager.LoadScene(1);

// doesn't work
int index = SceneManager.GetSceneByName("Main").buildIndex; //returns -1
SceneManager.LoadScene(index);

// also doesn't work (Where current scene is buildIndex 0)
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
4

2 回答 2

1

SceneManager.GetSceneByBuildIndexSceneManager.GetSceneByName和 类似的功能仅适用于加载的场景。如果未加载场景,它将返回 -1。原因是,您可以附加加载场景,因此甚至可以加载 5 个场景。

确实,api在很多方面都缺乏。

在您的情况下,您尝试在 之后立即使用它SceneManager.LoadScene(1);,最有可能int index = SceneManager.GetSceneByName("Main").buildIndex;返回,-1因为场景将“正式”加载到下一帧。

您可以尝试在协程中等待 1 帧,然后执行此操作。但通常你会有场景索引或场景名称来加载/保存它,而不关心场景加载后的逻辑。您可以创建一个管理器来存储所有加载的场景,如果您需要它们来决定接下来要加载的场景,您可以在其中查找它们的构建索引。

或者,您可以使用处理很多的 Addressables 包,这很难进入,但我认为场景加载在那里工作得更好。

于 2021-06-13T11:50:20.860 回答
0

在构建菜单中,通过单击 Unity 编辑器上的文件访问,您可以组织场景并将它们添加到流程中,如下图所示

我不确定,但我想当你没有为流分配场景时,它会得到 sceneIndex = -1。因此,加载一个场景,转到 BuildSettings,将其添加到构建流程中,对所有场景执行相同操作。我认为这样你就可以解决它。

于 2019-03-31T00:16:08.570 回答