Unity加载场景报错未添加到Build Settings,索引异常升高怎么解决
问题根因
你当前的报错核心原因是关卡数值未做上限校验:每次通关都会直接将存储在PlayerPrefs里的Level值+1,超过你实际开发的9个关卡后仍会持续累加,同时PlayerPrefs是本地持久化存储,错误的数值不会随游戏重启自动重置,最终就会触发加载不存在的33号场景的报错。
附报错截图:
原问题代码逻辑:
IEnumerator NextLevel() { finish = true; PlayerPrefs.SetInt("Level", PlayerPrefs.GetInt("Level", 1) + 1); yield return new WaitForSeconds(1); SceneManager.LoadScene("Level" + PlayerPrefs.GetInt("Level")); }
解决方法
- 第一步:添加关卡数值上限校验,修改NextLevel逻辑,示例代码如下,你可以根据自己的需求修改达到最高关卡后的跳转逻辑(比如跳通关页、回首页、循环关卡等)
IEnumerator NextLevel() { finish = true; int currentLevel = PlayerPrefs.GetInt("Level", 1); const int MAX_LEVEL = 9; // 你实际的最大关卡数 // 未到最大关卡才+1 if (currentLevel < MAX_LEVEL) { currentLevel += 1; PlayerPrefs.SetInt("Level", currentLevel); } else { // 达到最大关卡后的自定义逻辑,示例为跳转首页,你可以改成自己需要的场景名 yield return new WaitForSeconds(1); SceneManager.LoadScene("MainMenu"); yield break; } yield return new WaitForSeconds(1); SceneManager.LoadScene("Level" + currentLevel); }
- 第二步:清理本地已存储的错误Level数值
- Unity编辑器环境下,直接点击顶部菜单栏
编辑->清除所有PlayerPrefs即可 - 打包后的版本可以临时加一行重置代码
PlayerPrefs.DeleteKey("Level");启动运行一次后删除即可,也可以在设置页加游戏进度重置功能
- Unity编辑器环境下,直接点击顶部菜单栏
- 第三步:可选优化(避免后续加关卡需要修改硬编码数值)
可以通过SceneManager.sceneCountInBuildSettings直接获取构建设置里的总场景数,动态计算最大关卡,不需要硬写9这个固定值,后续新增关卡只要加到构建设置里即可,无需修改逻辑代码。
内容的提问来源于stack exchange,提问作者ngvan0807
相关产品推荐
相关产品推荐

