最近看教学,有个讲解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. .NET Core IdentityServer4实战 第六章-Consent授权页

    在identityServer4中登陆页面只要是成功了,就会注册一个Cookie在服务器资源上,像现在大部分的网站第三方授权,都是经过一个页面,然后选需要的功能,IdentityServer4也给我们 ...

  2. 每日一问:谈谈 SharedPreferences 的 apply() 和 commit()

    SharedPreferences 应该是任何一名 Android 初学者都知道的存储类了,它轻量,适合用于保存软件配置等参数.以键值对的 XML 文件形式存储在本地,程序卸载后也会一并清除,不会残留 ...

  3. mongoshell 执行JavaScript文件获取数据库实例基本信息

    由于MongoDB没有关系型数据中强大的数据字典.因此,如果需要汇总统计一些内部信息,包括数据量,基本元信息,集群架构,状态信息.则需要自己写脚本统计.为日后工作方便,本人在此将一些统计信息通过Jav ...

  4. 关于c++中的Debug以及runtime_error之segment_fault

    差不多每次编一些竞赛类的程序都会至少给我报一次runtime_error(运行时错误).这或许也是广大OIer心中永远的痛.~_~ 本文主要讨论如何对runtime_error以及其中的segment ...

  5. iOS组件化开发一使用source管理远端库升级(四)

    一.克隆远端库代码到本地选择master分支 1.克隆 2.代码会显示出你所有版本的tag 二.可以在Example目录下验证代码的正确行: cd 到库的文件夹然后 pod install comma ...

  6. elasticsearch 集群部署,版本 5.5.0

    准备说明: 两台服务器 Ip分别为 192.168.239.78(主),192.168.239.49(从) 主服务器上配置如下:1.上传es5.5.0版本至主服务器2.解压 unzipunzip el ...

  7. Leetcode 195 Tenth Line

    Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...

  8. 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM

    前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...

  9. Java面试总结(一)

    1.equals和==和hashcode “==”是运算符,比较两个变量的值是否相等   equals是Object类的方法.比较两个对象是否相等   hashcode是Object类的方法,返回一个 ...

  10. CF1194D 1-2-K Game (博弈论)

    CF1194D 1-2-K Game 一道简单的博弈论题 首先让我们考虑没有k的情况: 1. (n mod 3 =0) 因为n可以被分解成若干个3相加 而每个3可以被分解为1+2或2+1 所以无论A出 ...