最近看教学,有个讲解UE4初始化顺序的,记录一下。

首先创建一个Actor,Character,GameInstance,GameMode,LevelScriptActor(关卡),PlayerController。

首先看一下actor的生命周期

Actor的头文件对于生成顺序注释是:

我们把actor蓝图直接拖入ue关卡中的话,应该会走从磁盘加载的流程。

已位于关卡中的 Actor 使用此路径,如 LoadMap 发生时、或 AddToWorld(从流关卡或子关卡)被调用时。

  1. 首先调用构造函数,包/关卡中的 Actor 从磁盘中进行加载。

  2. PostLoad - 在序列化 Actor 从磁盘加载完成后被调用。

  3. InitializeActorsForPlay

  4. 为未初始化的 Actor 执行 RouteActorInitialize(包含无缝行程携带)

    1. PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用

    2. InitializeComponent - Actor 上定义的每个组件的创建辅助函数。

    3. PostInitializeComponents - Actor 的组件初始化后调用

  5. BeginPlay - 关卡开始后调用

然后在C++中,分别在构造函数,PostInitializeComponents,BeginPlay,tick函数后面打印下log(时间顺序从下往上)。

上面的解释:

GameInstance是在world生成之前就已经存在的一个object,世界存在于它下面的WorldContext,所以一般用来存储整个游戏中的一些数据。 切换world或者level其实就是更换下它下面的数据。

所以在上面的打印之前,先调用GameInstance的init(),然后创建世界。

创建世界下面的关卡,以及关卡下所有的actor

然后读取worldsetting下的gamemode

打印顺序并不是严格按照顺序来的。

然后开始调用beginplay

我们在HUD的beginplay下面创建了widget

所以在HUD的beginplay后调用widget的构造函数。

最后进行Tick函数。

内容部分来源于https://didi.ke.qq.com/。

学习ue4 c++可以看看这个大佬的教程,很棒。

UE4 游戏模块初始化顺序的更多相关文章

  1. Windows加载器与模块初始化

    本文是Matt Pietrek在1999年9月的MSJ杂志上发表的关于Windows加载器与模块初始化方面的文章.作者深入分析了LdrpRunInitialize璕outines例程的作用,用C语言写 ...

  2. 调整static变量初始化顺序的一个办法

    // wrap the LaunchDir variable in a function to work around static/global initialization order stati ...

  3. UE4游戏开发基础命令

    在个人的Unrealengine账户中关联自己的GitHub账户成功之后,就可以访问UE4引擎的源码了. git clone -b release https://github.com/EpicGam ...

  4. 面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序

    第一:private, public, protected访问标号的访问范围. private:只能由          1.该类中的函数          2.其友元函数访问 不能被任何其他访问,该 ...

  5. C++成员变量、构造函数的初始化顺序 [转]

    C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静 ...

  6. Java中的成员初始化顺序和内存分配过程

    Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...

  7. Driver 初始化顺序

    Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有模块的程序编译到Linux内核中,由do_initcall函数加载 核心进程(/init/main.c)kernel_ini ...

  8. Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)

    模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...

  9. C++——类继承以及类初始化顺序

    对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...

随机推荐

  1. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  2. 【STL】集合运算

    STL中有可以实现交集.并集.差集.对称差集的算法. 使用前需要包含头文件: #include <algorithm> 注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!! 交 ...

  3. MySQL优化(一)

    MySQL数据库优化一之引索详解 对于网站优化最注重的就是数据库的优化,而在数据库优化中首先考虑到的应该是数据库索引是否建立于是否建立的正确. 1.对于刚刚接触数据库的程序员,对于引索不是很理解.下面 ...

  4. Python静态方法,其实暗藏玄机

    文章首发于 微信公众号:Python编程时光 这个标题「静态方法其实暗藏玄机」其实只是该文章的一个知识点.或许有些标题党,但没有关系,我相信有不少人对此并没有深入研究他们,不信我问你三个问题,你看能否 ...

  5. Java多线程同步工具类之Semaphore

    Semaphore信号量通常做为控制线程并发个数的工具来使用,它可以用来限制同时并发访问资源的线程个数. 一.Semaphore使用 下面我们通过一个简单的例子来看下Semaphore的具体使用,我们 ...

  6. Spring 入门程序

    1.0 导包的时候要注意: 以上的第一个是.class文件 以上的第二个是文件的解释性页面. 以上的第三个是.java文件 2.0 配置文件需要导入依赖(有dtd 依赖,也有xsd依赖) ²  从be ...

  7. HDU 3062:Party(2-SAT入门)

    http://acm.hdu.edu.cn/showproblem.php?pid=3062 题意:中文. 思路:裸的2-SAT.判断二元组的两个人是否在同一个强连通分量. 学习地址:http://w ...

  8. ZOJ 3962:Seven Segment Display(思维)

    https://vjudge.net/problem/ZOJ-3962 题意:有16种灯,每种灯的花费是灯管数目,代表0~F(十六进制),现在从x开始跳n-1秒,每一秒需要的花费是表示当前的数的花费之 ...

  9. web前端css(三)

    一 . 文本属性和字体属性(常用) 1.    文本属性 text-align: left, right, enter, justify(两端对齐,只适用于英文);   /*对齐方式*/ color: ...

  10. 深入学习Spring框架(三)- AOP面向切面

    1.什么是AOP? AOP为 Aspect Oriented Programming 的缩写,即面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术..AOP是OOP的延续, ...