Unreal游戏初始化流程

news2024/12/24 3:30:00

前言

本文主要是总结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.coloradmin.cn/o/2132263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang使用ReverseProxy实现反向代理

目录 1.源码结构体 2.官方单机示例 3.使用示例 4.简单的http服务(用于测试) 1.源码结构体 type ReverseProxy struct {// Rewrite 必须是一个函数,用于将请求修改为要使用 Transport 发送的新请求。然后,其响应将原封不动地…

打造古风炫酷个人网页:用HTML和CSS3传递笔墨韵味

需要用到的背景大家可以自己找喜欢的风格!!! 当然俺把俺用的背景放到文章最后了哦!!!!! 感谢关注和支持 长期更新哦~~~ 1. 简洁的页面布局:保持优雅和对称 在古风设计中,布局的对称性非常重要…

【知识图谱】3.Protege下载安装

一、Protege 1.相关介绍 Protg软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具,也是基于知识的编辑器,属于开放源代码软件。 这个软件主要用于语义网中本体的构建,是语义…

第15-02章:理解Class类并获取Class实例

我的后端学习大纲 我的Java学习大纲 1、Java反射机制原理图: 源代码通过Javac编译得到字节码文件,当我执行到new一个对象的时候,字节码文件会通过ClassLoader被加载,然后得到一个Class类对象,存放在堆中,加…

系统分析师10:知识产权与标准化

1 内容提要 保护范围与对象(★★★★)保护期限(★)知识产权人确定(★★★)侵权判断(★★★)标准的分类标准代号的识别 2 保护范围与对象 使用许可 按照被许可使用权的排他性强弱不同,可以将使用许可分为以下三种: ①独占使用许可-仅1个授权…

中国电子学会202406青少年软件编程(Python)等级考试试卷(一级)真题与解析

青少年软件编程(Python)等级考试试卷(一级) 分数:100题数:37 一、单选题(共25题,共50分) 1.在使用turtle绘制图形时,如果要控制小海龟移动到 x 坐标为 200,y 坐标为150 的位置,以下代码能够实现效果的是?( ) A. turtle.go(150, 200) B. turtle.go(200, 150) …

在线客服如何与呼叫系统结合使用?

以下是在线客服与呼叫系统结合使用的常见方式: 1.从客户接入角度 a多渠道整合: 将网站在线客服、手机APP在线客服、社交媒体平台(如微信公众号、微博私信等)以及呼叫系统的电话接入渠道整合在一个统一的平台上。例如&#xf…

HTTP跨域请求时为什么要发送options请求

跨域请求 浏览器同源策略同源策略一般限制Ajax网络请求&#xff0c;不能跨域请求server不会限制<link> <img> <script> <iframe> 加载第三方资源 JSONP实现跨域 <!-- aa.com网页 --> <script>window.onSuccess function(data) {consol…

如何选择PCB板材?

pcb板材的基本参数有哪些&#xff1f; 1. 厚度&#xff1a;PCB板材厚度是指板子的整体厚度。常见的厚度有0.8mm、1.0mm、1.6mm、2.0mm等。在选择时需要根据实际需求进行选择&#xff0c;通常需要根据元件数量、限制空间和性能要求来决定。 2. 热膨胀系数&#xff1a;热膨胀系数…

把设计模式用起来(3)用不好的原因之时机不对

上一篇&#xff1a;《把设计模式用起来&#xff08;3&#xff09;——用不好的原因 之 实践不足》https://blog.csdn.net/nanyu/article/details/141939342 本篇继续讲设计模式用不好的常见原因&#xff0c;这是第二个&#xff1a;使用设计模式的时机不对。 二、时机不对 这里…

linux的文本编辑器vim常用操作命令介绍

目录 一、vim介绍 二、vim的特点 1、模式编辑 2、强大的命令集 3、可配置性 4、插件系统 5、多平台支持 三、vim的基础用法 1、打开或创建文件 2、移动光标 3、编辑文件 4、返回命令模式 5、保存文件并退出 6、不保存并退出 四、vim的部分进阶用法 1、快速删除行 2、撤销操作…

数据结构——复杂度讲解

已经太久没用更新了&#xff0c;由于各种原因&#xff0c;导致很久没用更新了&#xff0c;但是停更期间我也是一直在很努力的学习与复习之前学过的知识&#xff0c;读了两本C语言的数据&#xff0c;初学者也是可以看的&#xff0c;推荐给大家&#xff0c;如果需要pdf&#xff0…

SAP TR传输工具

实现效果 不用释放请求&#xff0c;可以把对方对象从DEV直接释放到目标系统中 表对象设计 表结构设计 1. ZSAB0007 Develop toolset: current working objects 2. Structure&#xff1a;ZSAB0008 发版计划请求列表 3. ZSAB0022 Development objects - object search r…

Bootstrap布局实例(偏移列)

偏移是一个用于更专业的布局的有用功能。它们可用来给列腾出更多的空间。例如&#xff0c;.col-xs-* 类不支持偏移&#xff0c;但是它们可以简单地通过使用一个空的单元格来实现该效果。 为了在大屏幕显示器上使用偏移&#xff0c;请使用 .col-md-offset-* 类。这些类会把一个…

Vue3: setup语法糖

一. setup语法糖 在 Vue 3 中&#xff0c;setup 语法糖是一种简化组件内部状态和方法管理的特性。它允许你将组件的逻辑直接编写在组件的定义中&#xff0c;而不是像 Vue 2 那样需要在 methods 和 data 属性中管理。setup 语法糖基于 ES6 的类的静态方法&#xff0c;允许你更灵…

改进大语言模型的最全方法!

这是一篇关于适应开源大语言模型&#xff08;LLMs&#xff09;的三部系列博客的第一篇。本文探讨将LLM适应领域数据的各种方法。 第二部分讨论如何确定微调&#xff08;fine-tuning&#xff09;是否适合您的用例。第三部分探讨策划良好训练数据集的一些经验法则。 0 引言 大…

NX二次开发—批量导出点工具

在NX上进行二次开发&#xff0c;设计一个UI界面&#xff0c;将选择的点导出 在NX上&#xff0c;进行UI样式编辑器 添加选择对象&#xff0c;修改标题&#xff0c;设置为多选 创建一个组&#xff0c;添加枚举&#xff0c;设置标题和枚举内容&#xff0c;不显示枚举标题LabelVis…

云微客AI文案编写,有手就能出“爆款”

​现如今新媒体时代&#xff0c;短视频平台已经成为了企业品牌宣传的重要战场&#xff0c;那么如何利用短视频平台进行品牌宣传、制作爆款视频就成为了各大商企需要解决的难题。由此&#xff0c;不得不提到云微客短视频矩阵系统&#xff0c;一键助力商企品牌轻松打造爆款内容。…

python学习第九节:爬虫实战-抓取地址库

python学习第九节&#xff1a;爬虫实战-抓取地址库 话不多说&#xff0c;直接上代码&#xff1b;下面的代码是从统计局抓取地址库并保存为json格式和excel格式。大家拿到代码直接运行即可。 #codingutf-8 #加入上面这行代码表示可以在下面代码中包含中文 import bs4 #网页解析…

wopop靶场漏洞挖掘练习

一、sql注入漏洞 1.在搜索框输入-1 union select 1,2,3# 可以看到页面有回显 2.查询数据库名 -1 union select 1,2,database()# 3.通过查询admin表的数据可以进行登录后台 -1 union select 1,2,group_concat(user_name,user_pass) from admin# 二、文件上传漏洞 1.登录后台…