版本: 2022.3
语言: 英语
域重载
禁用域和场景重载的细节

场景重载

默认情况下,场景场景包含游戏的环境和菜单。将每个独特的场景文件想象为一个独特级别。在每个场景中,你放置你的环境、障碍和装饰,本质上以零件的形式设计和构建你的游戏。 更多信息
术语表 中查看
重载是启用的。这意味着当你进入播放模式时,Unity 会销毁所有现有的场景 游戏对象Unity 场景的基本对象,可以代表角色、道具、风景、摄像机、航点等等。游戏对象的功能是由附加到的组件定义的。 更多信息
术语表 中查看
并从磁盘重新加载场景。Unity 完成此过程所需的时间会随着场景的复杂性而增加,这意味着随着你的项目变得更加复杂,你在按下播放按钮和场景在编辑器中完全加载之间的等待时间会更长。

当你禁用场景重载时,该过程所需的时间更少。这使得你可以更快地进行项目开发。Unity 不是从磁盘重新加载场景,而是仅重置场景的修改内容。这避免了卸载和重新加载场景的时间和性能影响。Unity 仍然调用相同的初始化函数(如 OnEnableOnDisableOnDestroy),就像它刚刚被重新加载一样。

跳过场景重载的影响

要禁用场景重载

  1. 转到编辑 > 项目设置 > 编辑器
  2. 确保启用播放模式进入选项。
  3. 禁用重载场景

有关更多信息,请参阅 如何配置播放模式

当你禁用场景重载时,在编辑器中启动应用程序所需的时间不再代表构建版本中的启动时间。因此,如果你要调试或分析你的项目启动期间确实发生的操作,你应该启用场景重载以更准确地表示构建版本中发生的确切加载时间和过程。

禁用场景重载应该对你的项目产生最小的影响。但是,由于场景重载与域重载紧密相关,有一些重要的区别

  1. 未序列化到构建中的 ScriptableObject 和 MonoBehaviour 字段(如 [NonSerialized]、私有或内部)保留其值。这是因为 Unity 不会重新创建现有对象,也不调用构造函数。此外,Unity 在域重载期间将数组和 List 类型的私有和内部字段的 null 转换为空的数组或 List 对象,并在运行时(非编辑器)保持非 null 脚本一段代码,允许你创建自己的组件、触发游戏事件、随时间修改组件属性以及以任何你想要的方式响应用户输入。 更多信息
    术语表 中查看

  2. 使用 ExecuteInEditModeExecuteAlways 脚本的脚本不会接收到 OnDestroyAwake 调用。Unity 不会调用 Awake,只有在_play_mode_ 在Awake/OnEnable 方法中调用时,当 EditorApplication.isPlaying 已经为真,Unity 才会调用 OnEnable。对于运行时(非编辑器)脚本的未序列化字段不应有问题,因为这些字段在编辑模式中不活跃,但是标注有 ExecuteInEditModeExecuteAlways 的脚本可能会改变自身或影响其他运行时脚本的字段。为了解决这个问题,您应自行在 OnEnable 回调中初始化任何受影响的字段。

域重载
禁用域和场景重载的细节