简介: EditorInit 内的内容比较少,上文已经梳理过了,记下来捋 LaunchEngine.cpp 的 Init() 方法
GEngineLoop.Init()
记录一个 Engine 初始化结束用的时间
创建一个空的 UClass 指针 名为 EngineClass
根据 GIsEditor 确定要实例画的 EngineClass 类型
- 如果不是 Editor,则实例化 GameEngine 对象,并封装到 UEngine 内并赋值给全局 GEngine
- 如果是 Editor,则实例化 UnrealEdEngine 对象,并封装到 UUnrealEdEngine 内,并赋值给全局 GEngine、GEditor、GUnrealEd
使用 check 宏检查 GEngine
如果可以播放 movie,则把加载场景放到后台
FPreLoadScreenManager 将预加载场景放到后台
初始化引擎内常用的时间属性
调用 GEngine 的初始化方法。 这还有一个 engine ~~ 草率了
广播引擎初始化尾声事件
ISessionServicesModule 加载 SessionServices 模块,并创建 FEngineService 和 FTraceService 实例
加载 PostEngineInit 阶段的模块和插件
广播 引擎所有模块已经加载完成
调用 GEngine->Start() 正式启动引擎
FPreLoadScreenManager 标记 引擎加载完成,并等待引擎加载场景结束
如果正在播放 movie,则等待 movie 播放完整
加载 Media 模块、AutomationWorker 、AutomationController 、ProfilerClient 、SequenceRecorder、SequenceRecorderSections 模块
FViewport 标记 GameRendering 可用
FCoreDelegates::StarvedGameLoop 绑定
FThreadHeartBeat 线程心跳包启动
FShaderPipelineCache 暂停着色管线批处理
广播 FEngineLoop 初始化完成
FShaderPipelineCache 继承着色管线批处理
FExternalProfiler 初始化扩展的 Profile,并注册
调用 EndOfEngineInit 阶段的延迟注册函数
总结
草率了,本以为 FEngineLoop 的Init 很短,结果里面还有一个 GEngine 的 Init 函数,而 这个 GEngine 有可能是UnrealEdEngine 也有可能是 GameEngine,看来这俩也得分别捋一下
罗列一下新遇到的东西
- UGameEngine 继承自 UEngine,负责管理游戏的启动、主循环、资源加载、渲染和逻辑更新等核心流程
- ISessionServicesModule 所任游戏回话模块
- FViewport 视口模块
- FThreadHeartBeat 线程心跳包类
- FShaderPipelineCache 着色器管线缓存功能
- FExternalProfiler 外部性能分析工具