当前位置: 首页 > news >正文

Unreal游戏初始化流程

前言

本文主要是总结Unreal在游戏启动时的初始化流程,包括讨论PIE和Standalone的区别,避免把一些初始化逻辑放在不合适的位置,比如我希望在所有Actor BeginPlay后执行某个逻辑,那我如果把它放在Subsystem的initialize中显然就会搞砸
在这里插入图片描述

启动入口

当我们PlayStandalone或者打包后启动后使用的Engine类型是GameEngine,在编辑器中的Engine类型是EditorEngine,Standalone状态下分两步Init和Start,PIE则只有一步StartPlayInEditorSession但内部其实也可以拆成Init和Start。

GameInstance

Init

两者分别通过GameInstance的InitializeStandaloneInitializeForPlayInEditor初始化GameInstance,区别在于Editor状态下在初始化GameInstance前我们其实已经有了World,所以会先通过PostCreatePIEWorld触发World的初始化,也就是说PIE的InitWorld是在InitGameInstance之前的,WorldSubsystem的Initialize会优先于GameInstanceSubsystem
在GameInstance的Init中会先执行ReceiveInit,对于Unlua游戏这里往往是lua侧的初始化入口(初始化lua侧的一切系统)。然后初始化Subsystem

Start

入口分别是StartGameInstanceStartPlayInEditorGameInstance,对于PIE因为World已经初始化好,所以在OnStart后会立刻对World进行InitializeActor和BgeinPlay。而Standalone会通过LoadMap进行异步加载地图,DS联机的话客户端会等待Server广播的加载地图消息,待地图加载完毕后依次对World执行Init、InitializeActor和BeginPlay

World

Init

这步只包括Subsystem初始化

InitializeActorsForPlay

这里首先会初始化所有世界中所有的Component,具体方式是对每个Actor进行PreRegister->Register->PostRegister,在Register中每个Actor会依次注册自己的TickFunction->注册RootComponent->注册其他Component。
然后会初始化GameMode调用InitGame,并广播OnActorInitialized,这里MatchState也会进入EnteringMap阶段

BeginPlay

这里会分别调用WorldSubsystem的OnWorldBeginPlay和广播OnWorldBeginPlay事件,此外会调用GameMode的StartPlay
在StartPlay中会遍历场景中所有Actor调用BeginPlay,然后广播OnWorldMatchStarting事件
这里MatchState会进入WaitingToStart,如果ReadyToStartMatch的话则进入InProgress

小结

所有组件注册后 OnActorsInitialized
所有Actor BeginPlay后 OnWorldMatchStarting或者OnWorldBeginPlay
WorldSubsystem的OnWorldBeginPlay在所有Actor BeginPlay前


http://www.mrgr.cn/news/26269.html

相关文章:

  • real, dimension(3) :: rho1 和 real :: rho1(3) 的区别
  • Python with 关键字语法糖
  • python基础知识(四)--if语句,for\while循环
  • 梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器
  • 揭秘区块链的未来加速器:Layer 2技术深度剖析
  • 清华港大开源,如何通过深度置信图提升3D重建的精度和速度?
  • 软件测试 | APP测试 —— Appium 的环境搭建及工具安装教程
  • DAY58拓扑排序
  • 阿里云服务器 篇八:图片展示和分享网站(纯静态,数据信息和展示页面分离)
  • 【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上传监测
  • 鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》
  • “百度热搜”揭示月饼遇冷背后:如何在经济下行中理性消费 + 应对风险?
  • yarn运行机制原理
  • 关于 Camera Tuning 岗位的一些认识和看法
  • 深入理解线程互斥锁
  • 音视频入门基础:AAC专题(1)——AAC官方文档下载
  • C盘空间不足如何解决?解决C盘空间不足的7个方法
  • 【聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装】
  • 双线性插值概念及MATLAB实现
  • C#基础知识-.NET,变量,容量单位,数据类型