UE5 在启动流程中的 Init 4
简介: 前文已经过了一遍 UUnrealEdEngine 的相关代码, 本文再过一下 UGameEngine 。
和 UUnrealEdEngine 类似,UGameEngine 的 Init 开始也是先调用基类 UnrealEngine 的Init,所以先捋 UEngine 的Init。
UEngine 在文件 UnrealEngine.cpp 内
UEngine::Init(IEngineLoop* InEngineLoop)
-
开启性能追踪、输出 "Initializing Engine ......" 日志,开启 CPU 周期性能记录
-
创建 Error 和 warning 收集器队列
-
FEngineBuildSettings 检查引擎构建设置,如果不是内部构建,则遍历插件输出相关版本信息
-
设置内存 warning handler
-
设置 EngineLoop
-
注册引擎元素
-
FURL 初始化引擎的 URL 解析系统
-
EngineSubsystemCollection 引擎子系统集创建和初始化
-
UGameMapsSettings 根据 cmdline 设置默认map
-
初始化 引擎 delat 时间
-
AddToRoot 防止被回收
-
添加 PreGarbageCollect 委托
-
如果是空项目则初始化 HMD 设备和 EyeTracking 设备
-
当不是 eidtor 时,关闭 ScreenSaver
-
如果不是 专属服务器和cmd模式,则初始刷 FSlateApplication 的音频
-
FObjectThumbnail 设置缩略图压缩器
-
加载 UEngine class 对象
-
加载配置
-
设置配置进程限制
-
设置选中材质的颜色
-
加载 WorldPartitionEditor 模块
-
初始化物体引用
-
FBlueprintCoreDelegates 设置脚本最大 Loop 迭代次数
-
设置全局近裁切面
-
UTextRenderComponent 初始化 MID 缓存
-
FNetworkVersion 设置项目版本
-
根据 cmdling 设置执行文件
-
ParseExecCommands 设置执行命令
-
根据命令行设置 vsync console 变量
-
检查派生数据缓存,如果正常则广播启动完成
-
添加路由错误和网络错误监听事件
-
FOnlineExternalUIChanged 、UOnlineEngineInterface 初始化在线子系统
-
初始化并注册可调是的渲染缓冲区
-
初始化 protal 服务
-
FEngineAnalytics 链接引擎分析服务,这里调用的是 Initialize ,但是注释写的是 connect
-
初始化音频管理器
-
动态加载引擎运行时的模块
- ImageWriteQueue
- StreamingPauseRendering
- MovieScene
- MovieSceneTracks
- LevelSequence
- CinematicCamera
- SparseVolumeTexture
-
check(AssetManager),并调用AssetManager->FinishInitialLoading();
-
向 EngineStats 添加统计数据项
-
通知所有监听器新添加的数据统计项
-
根据 cmdline 添加网络追踪
-
记录 HMD 分析数据
-
初始化线程配置
UGameEngine::Init(IEngineLoop* InEngineLoop)
在非 Editor 模式下的 Init 过程中创建的 GEngine 就是这个类
-
开启性能统计和cpu周期统计
-
FEngineConsoleCommandExecutor 创建 cmd 执行对象
-
调用上方 UEngine 的 Init
-
GNetworkProfiler 根据 cmdline 参数 打开追踪
-
加载并应用用户游戏设置
-
创建 Game 单例,并初始化
-
IMovieSceneCaptureInterface 创建视频采样对象,并获取句柄
-
UGameViewportClient 创建并初始化 客户端视口
-
记录 log flush 时间
-
附加 Viewport 到新的 视口
-
UGameViewportClient 广播视口创建完毕
-
bIsInitialized 设置为 true