UE4游戏框架:从int main()到BeginPlay

游戏循环函数解析:

主要循环逻辑在EngineLoop类中实现,在引擎初始化之前有一个PreInit阶段,在经历该阶段之后才正式初始化(初始化对应代码GEngineLoop.Init),之后每帧更新(GEngineLoop.Tick),直到最后退出游戏(GEngineLoop.Exit()

一,在类进行PreInit阶段时,引擎加载底层模块,之后如果有,加载引擎或者插件中PreInit阶段的模块

二,Default阶段,如果定义了Actor子类或者GameMode子类,那么EngineLoop就会为类的默认实例分配空间,之后运行构造函数,使用其父类传入的CDO作为模板(因此构造函数不应当包含任何关于游戏性相关的代码

以上完成了初始化工作,底层模块加载以及类注册工作等内容,之后继续执行Init方法

三,

Init方法简单粗暴的交给了UEngine类来执行

Eingine模块->模块中有一个Engine.h的头文件->头文件中定义了一个UEngine的类->衍生为UEditorEngine和UGameEngine两个类

在游戏的整个Init阶段

FEngineLoop检查Engine的配置文件,找出应当使用哪个GameEngine类,之后创建该类的实例,并且用全局UEingine类型指针指向它,从而能够在Engine/Engine.h中声明的全局变量GEngine来访问它,

当Engine实例被创建并且被初始化之后,EngineLoop触发一个全局委托来告知引擎目前已经初始化了(下)

最终,引擎启动

初始化完成

Ⅱ Engine的初始化流程

Engine会在地图加载之前进行初始化,并且加载一些重要对象

ViewportClient作为用户和引擎之间的交互接口

GameInstance处理一下原本由Engine对象来处理的特定于项目的功能

初始化之后得到了什么呢?

一个GameEngine,一个GameInstance,一个GameViewportClient,一个LocalPlayer

首次调用LoadMap:

在调用LoadMap之后,将拥有一个UWorld对象来包含所有保存在游戏地图中的Actor

还将生成构成GameFramework核心的一系列Actor对象:包括GameMode,GameSession,GameState,GameNetworkManager,PlayController,PlayerState以及Pawn对象

从高层系统上说,需要考虑两种生命周期,以地图加载进来为分界线

地图加载前就生成的对象和整个游戏运行过程紧密相关

有些资源伴随地图存在而存在,伴随地图消失而消失

例如:GameMode,GameState以及PlayerController

如果直接切换到新地图/连接到其他服务器/退回主菜单——所有Actor对象都会被销毁,类被清空,类的对象也不复存在,直到加载下一张地图

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值