UE4 源码阅读:从引擎启动到Receive Begin Play

一、引擎主循环

UE版本:4.27
一、引擎主循环的位置:
Launch.cpp : Guarded Main函数
在这里插入图片描述

二、、Guarded Main函数执行逻辑:
1、EnginePreInit:加载大多数模块

int32 ErrorLevel = EnginePreInit( CmdLine );

PreInit模块加载顺序:
在这里插入图片描述
模块加载过程:
(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)
(2)调用模块的StartUpModule方法

2、FEngineLoop::Init()
1、 检查Engine的配置文件找出使用了哪一个GameEngine类(UGameEngine和UEditorEngine,均派生自UEngine)
在这里插入图片描述
2、 创建该类的实例,并让全局UEngine指针(GEngine)指向该实例
在这里插入图片描述
(3)触发全局委托告知引擎已初始化
在这里插入图片描述
(4)加载插件和项目模块
在这里插入图片描述(5)引擎启动成功
在这里插入图片描述

3、UGameEngine:
调用顺序:
在这里插入图片描述
(1)UGameEngine::Init:
会在地图加载完之前进行初始化,初始化过程会创建
GameInstance、GameViewportClient、LocalPlayer对象,之后游戏启动
创建GameInstance:
在这里插入图片描述
创建GameViewportClient,代表屏幕本身:
在这里插入图片描述
创建LocalPlayer,代表坐在屏幕前的用户,之后游戏启动:
在这里插入图片描述

(2)LoadMap的作用:
加载在DefaultEngine.ini中定义的地图,将会创建UWorld对象(保存游戏地图中所有的AActor)、以及一些在游戏地图加载后才生成的对象
上:在游戏地图加载前生成的对象
下:在游戏地图加载后生成的对象
当切换新地图中,地图中的所有对象都会被销毁,UWorld对象被清空(不使用seamless travel)
在这里插入图片描述

(3)LoadMap加载World的过程(UEngine::LoadMap):
1、触发全局委托表明游戏地图更换,如果当前已经加载一张地图,会清理并销毁当前World
在这里插入图片描述

2、GameInstance加载World
在这里插入图片描述
3、加载WorldPackage,创建UWorld对象,
在这里插入图片描述
4、在World中保存对GameInstance的引用,World对象的引用保存在WorldContext中,并将其世界类型设置为Game。
AddToRoot:防止被垃圾回收;
InitWorld:让World对象能够对一些物理,寻路,AI和声音的系统进行设置;
SetGameMode:World对象会让GameInstance在世界生成一个GameMode的Actor对象,同时所有引用到的资产都会被加载:
在这里插入图片描述
5、InitializeActorsForPlay:
(1)首先会注册世界中的所有Actor组件(Actor上的每一个Component也要被注册);Component注册过程(UActorComponent::RegisterComponentWithWorld)。
在这里插入图片描述
(2)Component被注册后,World会调用GameMode的InitGame方法,GameMode会生成一个GameSession类的Actor对象:
在这里插入图片描述
(3)RouteActorInitialize:
World遍历每一个Level初始化所有Actor对象,每个Actor会先调用PerInitializeComponent方法,做初始化的早期工作;GameMode作为Actor也会在这是被调用,并生成GameState对象,并将其关联到World对象中。;
在这里插入图片描述在这里插入图片描述
之后还会对所有Actor进行一个遍历,这次会调用InitializeComponents和PostInitializeComponents方法,完成World的初始化。
6、Spawn Actor
遍历GameInstance里的所有Local Player
在这里插在这里插入图片描述
入图片描述
7、处理登录过程
8、LoadMap总结
Engine -> World World -> GameMode -> GameState
在这里插入图片描述

(4)游戏循环:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值