UE5 在启动流程中的 Init 2

简介: EditorInit 内的内容比较少,上文已经梳理过了,记下来捋 LaunchEngine.cppInit() 方法

GEngineLoop.Init()

  1. 记录一个 Engine 初始化结束用的时间

  2. 创建一个空的 UClass 指针 名为 EngineClass

  3. 根据 GIsEditor 确定要实例画的 EngineClass 类型

  • 如果不是 Editor,则实例化 GameEngine 对象,并封装到 UEngine 内并赋值给全局 GEngine
  • 如果是 Editor,则实例化 UnrealEdEngine 对象,并封装到 UUnrealEdEngine 内,并赋值给全局 GEngineGEditorGUnrealEd
  1. 使用 check 宏检查 GEngine

  2. 如果可以播放 movie,则把加载场景放到后台

  3. FPreLoadScreenManager 将预加载场景放到后台

  4. 初始化引擎内常用的时间属性

  5. 调用 GEngine 的初始化方法。 这还有一个 engine ~~ 草率了

  6. 广播引擎初始化尾声事件

  7. ISessionServicesModule 加载 SessionServices 模块,并创建 FEngineServiceFTraceService 实例

  8. 加载 PostEngineInit 阶段的模块和插件

  9. 广播 引擎所有模块已经加载完成

  10. 调用 GEngine->Start() 正式启动引擎

  11. FPreLoadScreenManager 标记 引擎加载完成,并等待引擎加载场景结束

  12. 如果正在播放 movie,则等待 movie 播放完整

  13. 加载 Media 模块、AutomationWorkerAutomationControllerProfilerClientSequenceRecorderSequenceRecorderSections 模块

  14. FViewport 标记 GameRendering 可用

  15. FCoreDelegates::StarvedGameLoop 绑定

  16. FThreadHeartBeat 线程心跳包启动

  17. FShaderPipelineCache 暂停着色管线批处理

  18. 广播 FEngineLoop 初始化完成

  19. FShaderPipelineCache 继承着色管线批处理

  20. FExternalProfiler 初始化扩展的 Profile,并注册

  21. 调用 EndOfEngineInit 阶段的延迟注册函数

总结

草率了,本以为 FEngineLoop 的Init 很短,结果里面还有一个 GEngine 的 Init 函数,而 这个 GEngine 有可能是UnrealEdEngine 也有可能是 GameEngine,看来这俩也得分别捋一下

罗列一下新遇到的东西

  • UGameEngine 继承自 UEngine,负责管理游戏的启动、主循环、资源加载、渲染和逻辑更新等核心流程
  • ISessionServicesModule 所任游戏回话模块
  • FViewport 视口模块
  • FThreadHeartBeat 线程心跳包类
  • FShaderPipelineCache 着色器管线缓存功能
  • FExternalProfiler 外部性能分析工具
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容