UE4 游戏模块初始化顺序
最近看教学,有个讲解UE4初始化顺序的,记录一下。
首先创建一个Actor,Character,GameInstance,GameMode,LevelScriptActor(关卡),PlayerController。
首先看一下actor的生命周期
Actor的头文件对于生成顺序注释是:
我们把actor蓝图直接拖入ue关卡中的话,应该会走从磁盘加载的流程。
已位于关卡中的 Actor 使用此路径,如 LoadMap 发生时、或 AddToWorld(从流关卡或子关卡)被调用时。
首先调用构造函数,包/关卡中的 Actor 从磁盘中进行加载。
PostLoad - 在序列化 Actor 从磁盘加载完成后被调用。
InitializeActorsForPlay
为未初始化的 Actor 执行 RouteActorInitialize(包含无缝行程携带)
PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用
InitializeComponent - Actor 上定义的每个组件的创建辅助函数。
PostInitializeComponents - Actor 的组件初始化后调用
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 游戏模块初始化顺序的更多相关文章
- Windows加载器与模块初始化
本文是Matt Pietrek在1999年9月的MSJ杂志上发表的关于Windows加载器与模块初始化方面的文章.作者深入分析了LdrpRunInitialize璕outines例程的作用,用C语言写 ...
- 调整static变量初始化顺序的一个办法
// wrap the LaunchDir variable in a function to work around static/global initialization order stati ...
- UE4游戏开发基础命令
在个人的Unrealengine账户中关联自己的GitHub账户成功之后,就可以访问UE4引擎的源码了. git clone -b release https://github.com/EpicGam ...
- 面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序
第一:private, public, protected访问标号的访问范围. private:只能由 1.该类中的函数 2.其友元函数访问 不能被任何其他访问,该 ...
- C++成员变量、构造函数的初始化顺序 [转]
C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静 ...
- Java中的成员初始化顺序和内存分配过程
Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...
- Driver 初始化顺序
Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有模块的程序编译到Linux内核中,由do_initcall函数加载 核心进程(/init/main.c)kernel_ini ...
- Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)
模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...
- C++——类继承以及类初始化顺序
对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...
随机推荐
- Codeforces 758B:Blown Garland(模拟)
http://codeforces.com/problemset/problem/758/B 题意:给出一个字符串,每4个位置对应一个颜色,如果为‘!’的话,代表该灯泡是坏的,问最后每个颜色坏的灯泡的 ...
- iOS 矢量图pdf替换2倍3倍图
一.在开发中矢量图的使用大大提高设计的切图效率! ios 中可以用pdf替换现在的2倍3倍图(1倍图已经忽略) 1.将pdf矢量图拖进工程Assets.xcassets中 2.按照步骤操作 3.矢量图 ...
- Java 中的字符串(String)与C# 中字符串(string)的异同
1. C# 中比较两个字符串字面量是否相等,可以使用 “==”比较运算符,是因为string 类型重写(override)了“==” 和 “!=” 运算符,在使用“==” 和 “!=” 进行字符串比较 ...
- 你懂什么叫js继承吗
说到继承呢?肯定有很多做java的朋友都觉得是一个比较简单的东西了.毕竟面向对象的三大特征就是:封装.继承和多态嘛.但是真正对于一个javascript开发人员来说,很多时候其实你使用了继承,但其实你 ...
- 云开发新能力,支持 HTTP 调用 API
今天来上班打开电脑,总感觉微信开发文档哪里有点不太一样,研究了半天原来是云开发又多了神级功能--HTTP API! HTTP API是什么?简单来说就是通过云开发HTTP API,可以不需要通过微信小 ...
- 数组指针&&指针数组
数组指针: 定义 int (*p)[n]; 占用内存中一个指针的存储空间 ()优先级高,首先说明p是一个指针,指向一个int型的一维数组,故名数组(的)指针.指向的一维数组的长度是n,也可以 ...
- C语言调用VIX_API开关虚拟机
#include <stdio.h> #include <stdlib.h> #include "vix.h" #define USE_WORKSTATIO ...
- 问题解决:Maven execution terminated abnormally (exit code 1)
Maven execution terminated abnormally (exit code 1) 修改setting.xml中的镜像位置 如下就可以了 <mirror> <id ...
- [leetcode]python 448. Find All Numbers Disappeared in an Array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- Java EE.JSP.动作组件
常见的JSP动作组件有以下几种: 1)<jsp:include>:在页面被请求的时候引入一个文件 2)<jsp:param>:在动作组件中引入参数信息 3)<jsp:fo ...