简介: 前文已经过了一遍 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
总结
- FURL 引擎的 URL 解析系统
- UGameMapsSettings 地图设置系统
- FObjectThumbnail 缩略图压缩工具
- FBlueprintCoreDelegates 蓝图核心委托
- UTextRenderComponent 文本渲染组件
- FOnlineExternalUIChanged 在线 UI 系统的 changed 委托
- UOnlineEngineInterface 引擎在线接口
- FEngineConsoleCommandExecutor 引擎的控制台执行示例
- FNetworkProfiler 网络调试系统
- IMovieSceneCaptureInterface 视频采样
- UGameViewportClient game视窗