zoukankan      html  css  js  c++  java
  • UE4 游戏模块初始化顺序

    最近看教学,有个讲解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++可以看看这个大佬的教程,很棒。

  • 相关阅读:
    -lpopt is not found while cross compiling for aarch64
    设置进程的cpu亲和性
    在ARM64位开发板上兼容ARM32位的可执行程序
    ARM开发板上查看动态库或者可执行程序的依赖关系
    交叉编译tmux
    使用PSCI机制的SMP启动分析
    将qemu使用的设备树dump出来
    故障review的一些总结
    理解Compressed Sparse Column Format (CSC)
    统计分析工程的依赖项
  • 原文地址:https://www.cnblogs.com/lixiao24/p/9325211.html
Copyright © 2011-2022 走看看