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

SceneManager.LoadSceneAsync()的两个阶段分别加载什么内容?

嘿,这个问题问到点子上了!Unity 的 SceneManager.LoadSceneAsync() 确实拆成了 Preload 和 Activation 两个核心阶段,我给你详细拆解下每个阶段具体负责加载和处理的内容:

Preload 阶段

这个阶段是异步加载的主要耗时部分,进度条的数值基本就是反映这个阶段的完成度:

  • 加载场景文件中包含的所有静态资源:比如场景内的 Mesh、Texture、Material、AudioClip、Shader,还有场景的 Lightmap 烘焙数据、NavMesh 导航网格数据(如果提前烘焙过的话)
  • 读取并初始化场景内所有 GameObject 的序列化配置数据:也就是你在 Inspector 面板里设置的各种属性,比如 Transform 的位置旋转缩放、组件的参数值,但这时候这些 GameObject 还处于未激活状态,只是把数据加载进内存了
  • 自动处理场景的依赖资源:比如某个 Material 引用了一个不在当前场景资源包里的 Texture,这个阶段会自动把这个依赖资源也加载进来
  • 这个阶段支持暂停:如果你把 allowSceneActivation 设置为 false,异步加载会卡在这个阶段,直到你把它设回 true 才会进入下一个阶段
Activation 阶段

这个阶段是瞬间完成的,不会体现在加载进度条里,但却是场景真正“活”起来的关键:

  • 激活场景内所有默认标记为Active的 GameObject:这时候这些对象的 Awake()、OnEnable() 方法会被依次调用(注意 Awake 是对象首次激活时仅调用一次,OnEnable 每次激活都会触发)
  • 初始化需要激活时才启动的组件:比如 Animator 的状态机、ParticleSystem 的初始发射状态,还有那些依赖于其他激活对象才能正常工作的组件
  • 场景切换的收尾处理:如果是用 LoadSceneMode.Single 模式加载,旧场景会在这个阶段开始前被卸载销毁;如果是 Additive 模式,新场景会被添加到当前场景列表中并设为活动场景(如果需要的话)
  • 触发加载完成的回调:SceneManager.sceneLoaded 事件会在这个阶段结束后被触发,你可以在这里做场景加载完成后的初始化逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:36:15