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

Unity加载下一场景时如何获取当前激活场景的build index?

问题根源

  • 脚本挂载的游戏对象未设置跨场景持久化:默认切换场景时,当前场景内的所有游戏对象都会被销毁,你的LevelSwitch脚本实例也会被清除,所有字段重置为默认值,CurrentSceneBuildIndex始终为0,调用NextLevel时会固定加载索引为3的场景,如果索引3刚好是你当前触发切换的场景,就会出现反复重载的问题。
  • 变量赋值时序错误:你调用SceneManager.LoadScene时,CurrentSceneBuildIndex还未被赋值,你是在触发场景加载之后才把sceneLoaded设为true,这时候旧场景的脚本已经进入销毁流程,Update来不及更新CurrentSceneBuildIndex的值。
  • 轮询获取场景索引的方式不可靠:通过Update每帧判断获取场景索引不仅效率低,还容易出现时序偏差,Unity提供了专门的场景加载回调事件可以使用。

修复方案

你可以直接使用以下修改后的代码,核心做了三个改动:① 让脚本挂载的对象跨场景持久化不被销毁;② 订阅场景加载完成事件,自动更新当前场景的build index;③ 初始化时就获取首次启动的场景索引,避免第一次调用切换方法时变量为空。

using UnityEngine;
using UnityEngine.SceneManagement; 

public class LevelSwitch : MonoBehaviour
{
    int CurrentSceneBuildIndex;

    private void Awake()
    {
        // 让当前对象跨场景不被销毁,保证脚本实例一直存在
        DontDestroyOnLoad(gameObject);
        // 订阅场景加载完成事件,每次场景加载完自动触发回调
        SceneManager.sceneLoaded += OnSceneLoaded;
        // 初始化时先获取当前启动场景的索引
        CurrentSceneBuildIndex = SceneManager.GetActiveScene().buildIndex;
    }

    // 场景加载完成的回调方法
    private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        // 直接获取新加载的场景索引,不需要轮询
        CurrentSceneBuildIndex = scene.buildIndex;
    }

    public void NextLevel()
    {
        // 这里判断下索引合法性,避免超过Build Settings里的场景总数报错
        if (CurrentSceneBuildIndex + 3 < SceneManager.sceneCountInBuildSettings)
        {
            SceneManager.LoadScene(CurrentSceneBuildIndex + 3);
        }
        else
        {
            Debug.LogWarning("目标场景索引超出Build Settings配置的场景总数");
        }
    }

    public void LevelSelect()
    {
        SceneManager.LoadScene("LevelSelect"); 
    }

    // 脚本销毁时取消事件订阅,避免内存泄漏
    private void OnDestroy()
    {
        SceneManager.sceneLoaded -= OnSceneLoaded;
    }
}

额外注意事项

  • 确保你的LevelSwitch脚本只挂载在一个游戏对象上,避免跨场景后出现多个实例冲突
  • 确认你Build Settings里已经添加了所有需要用到的场景,且索引顺序符合你的预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:04