You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"); 启动运行一次后删除即可,也可以在设置页加游戏进度重置功能
  • 第三步:可选优化(避免后续加关卡需要修改硬编码数值)
    可以通过SceneManager.sceneCountInBuildSettings直接获取构建设置里的总场景数,动态计算最大关卡,不需要硬写9这个固定值,后续新增关卡只要加到构建设置里即可,无需修改逻辑代码。

内容的提问来源于stack exchange,提问作者ngvan0807

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:18:03