Unity中SceneManager.sceneLoaded是否始终在所有游戏对象的Awake()执行完毕后触发?
Unity中SceneManager.sceneLoaded是否始终在所有游戏对象的Awake()执行完毕后触发?
你好!根据Unity官方的执行顺序规范以及大量实际项目的验证,你完全可以放心——SceneManager.sceneLoaded事件确实会始终在场景中所有游戏对象的Awake()方法执行完毕后才触发,不管是在编辑器中运行,还是打包分发后的版本都是如此。
这是由Unity场景加载的固定执行流程决定的:
- 当场景开始加载时,Unity首先会完成场景内所有GameObject的实例化操作;
- 紧接着,Unity会依次调用每个带有MonoBehaviour组件的对象的
Awake()方法(哪怕你给部分脚本设置了自定义执行顺序,也只是调整Awake()之间的先后顺序,不会打破“所有Awake()执行在前”的规则); - 只有当场景中所有对象的
Awake()都执行完成,场景初始化的核心阶段结束后,Unity才会触发SceneManager.sceneLoaded事件。
你在编辑器中观察到的日志顺序(所有Awake日志先输出,再出现OnSceneLoaded()的日志),正是这个标准流程的正常表现,打包后不会出现顺序颠倒的情况,不用担心环境差异带来的变化。
备注:内容来源于stack exchange,提问作者Adriano Castro
相关产品推荐
相关产品推荐

