Lyra学习笔记 Experience流程梳理

article/2025/6/17 15:00:18

目录

  • 前言
  • 1 创建
  • 2 加载
  • 3 Deactivate
  • 4 总结与图示

前言

这篇主要将视角放在Experience的流程,所以不会涉及一些更深的东西

之后ULyraExperienceManagerComponent简称为EMC

1 创建

完事开头难,首先找到了管理Experience的组件,那么它的初始化位置在哪?
其作为ALyraGameState的成员,在构造函数中用CreateDefaultSubobject创建。

//LyraGameState.h
private:// Handles loading and managing the current gameplay experienceUPROPERTY()TObjectPtr<ULyraExperienceManagerComponent>ExperienceManagerComponent;//LyraGameState.cpp
ALyraGameState::ALyraGameState(const FObjectInitializer& ObjectInitializer): Super(ObjectInitializer)
{...ExperienceManagerComponent = CreateDefaultSubobject<ULyraExperienceManagerComponent>(TEXT("ExperienceManagerComponent"));...
}

2 加载

结合EMC中的这个枚举梳理,初始为Unloaded

//LyraExperienceManagerComponent.h
ELyraExperienceLoadState LoadState = ELyraExperienceLoadState::Unloaded;
//其定义
enum class ELyraExperienceLoadState
{Unloaded,Loading,LoadingGameFeatures,LoadingChaosTestingDelay,ExecutingActions,Loaded,Deactivating
};

结合之前的地图加载流程分析,加载的流程开始于ULyraExperienceManagerComponent::SetCurrentExperience->

ULyraExperienceManagerComponent::StartExperienceLoad中LoadState转为Loading->
ULyraExperienceManagerComponent::OnExperienceLoadComplete中收集完所有的GameFeaturesToEnable后,LoadState 转为LoadingGameFeatures->
对于每个GF,执行ULyraExperienceManager::NotifyOfPluginActivation和UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin->

先忽略测试用状态LoadingChaosTestingDelay

ULyraExperienceManagerComponent::OnExperienceFullLoadCompleted中状态转为ExecutingActions并开始执行Actions,执行顺序为Experience本身Acitons中的每一个Action、遍历ActionSets,每一个ActionSets的Actions的每一个Action,对于单个Action,顺序执行OnGameFeatureRegistering()、OnGameFeatureLoading()、OnGameFeatureActivating(Context)->
Action执行完成后,状态进入Loaded,然后分别是OnExperienceLoaded三个优先级的多播

3 Deactivate

EndPlay触发DeActive->
DeActive涉及的GameFeature->
状态转为Deactivating->
同理按顺序触发每个Action的OnGameFeatureDeactivating、OnGameFeatureUnregistering()->
状态转为Unloaded ,CurrentExperience = nullptr;

4 总结与图示

在这里插入图片描述
在这里插入图片描述


http://www.hkcw.cn/article/WohyZTvlRa.shtml

相关文章

一文读懂Automotive SPICE

一、过程参考模型 以下过程组被组织成三个过程类别:主要生命周期过程(Primary Lifecycle Process)、组织生命周期过程(Organization Lifecycle Processes)和支持生命周期过程(Supporting Lifecycle Process)。 1.1、主要生命周期过程类别 主要生命周期过程类别包含可…

STM32F103_Bootloader程序开发07 - 使用J-Flash将App_crc.bin烧录到App下载缓存区,再校验CRC32,确认固件完整性

导言 本章节做一个实验“校验一遍App缓存区的固件”&#xff0c;看看能不能通过CRC32校验。在OTA升级流程上&#xff0c;当bootloader程序接收完上位机下发的App固件到App下载缓存区后&#xff0c;bootloader程序要对App下载缓存区的固件进行CRC32校验。 校验通过的话&#xf…

智联未来:低空产业与AI新纪元-(上)

1. 被重新定义的三维空间 低空经济是指在1000米以下空域开展的各类经济活动&#xff0c;这个曾被视为"空中盲区"的领域&#xff0c;正在AI技术加持下焕发新生。全球咨询机构预测&#xff0c;到2030年低空经济将创造超2万亿美元市场价值&#xff0c;相当于再造一个日…

[prophet]Importing matplotlib failed. Plotting will not work.

测试环境&#xff1a; prophet1.1.4 matplotlib3.4.3 pillow10.2.0 当import prophet时候会报错 解决方法&#xff1a; pip install pillow9.0.0 pip uninstall matplotlib pip install matplotlib3.4.3

核心机制三:连接管理(三次握手)

核心机制一:确认应答 > 实现可靠传输的核心 接受方给发送方返回"应答报文"(ack) 1)发送方能够感知到对方是否收到 2)如果对方没有收到,发送方采取措施 序号按照字节编排 (连续递增) 确认序号按照收到数据的最后一个字节序号 1 核心机制二:超时重传 > 产生丢包…

三步问题 --- 动态规划

目录 一&#xff1a;题目 二&#xff1a;算法原理 三&#xff1a;代码实现 一&#xff1a;题目 题目链接&#xff1a;面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码实现 class Solution { public:int waysT…

Adobe Acrobat 9.1.2 Pro (install)

Adobe Acrobat 9.1.2 Pro &#xff08;install) PDF编辑工具安装Acrobat 9.1.2 E:\Downloads\Adobe_Acrobat_ProX\Adobe_Acrobat_ProX 1118-1905-0841-9679-7056-1416 先别启动哦&#xff01;&#xff01;&#xff01;&#xff01; 先别启动哦&#xff01;&#xff01;&…

我们通常说理解的软件设计的哲学是什么?

软件设计的哲学指的是一系列指导软件设计决策的根本理念、原则和价值观。它超越了具体的技术、工具或模式&#xff0c;深入到“我们为什么这样设计软件”以及“什么才是好的软件设计”的核心思考层面。 它不是一份具体的操作手册&#xff0c;而更像是一种思维方式和价值取向&a…

表单校验代码和树形结构值传递错误解决

表单校验代码&#xff0c;两种方式校验&#xff0c;自定义的一种校验&#xff0c;与element-ui组件原始的el-form表单的校验不一样&#xff0c;需要传递props和rules过去校验 const nextStep () > {const data taskMsgInstance.value.formDataif(data.upGradeOrg ) {elm…

Yolov8改进 C2f中添加注意力机制Attention 包括SE、CA、CBAM、MHSA等)具体实现代码,如何将这些模块集成到YOLOv8模型中

Yolov8改进 C2f中添加注意力机制代码 包括SE、CA、CBAM、MHSA等&#xff09;的具体实现代码&#xff0c;以及如何将这些模块集成到YOLOv8模型中的示例。 文章目录 1. **Channel Attention (CA)**2. **Spatial Attention (SA)**3. **CBAM (Convolutional Block Attention Module…

Python:操作Excel公式

💻Python 操作 Excel 公式实战教程(含 openpyxl、xlwings 全解析 + 常用公式大全) 在日常的数据分析与自动化报表场景中,借助 Python 操作 Excel 文件能极大提高效率。尤其是在批量生成、写入与读取 Excel 公式方面,Python 提供了多个强大库支持。 📚一、主流库对比:选…

tomcat服务器以及接受请求参数的方式

1.javaee&#xff1a;意为java企业版&#xff0c;指java企业级开发的规范总和&#xff0c;包含13项技术规范 2.事实上服务器和客户端进行交互的过程中&#xff0c;有一个前端控制器在中间运作&#xff0c;这个控制器为DispatcherServlet&#xff0c;它负责将客户端请求的信息包…

AI文档排版工具永久免费

&#x1f680; 快速开始 1. 启动程序 双击 AI文档排版工具.exe 启动程序 下载地址&#xff1a;https://pan.quark.cn/s/1ce59c96040f 2. 首次配置 首次使用需要配置API信息点击"⚙️ API配置"按钮输入API地址和密钥点击"测试连接"验证 3. 开始排版 …

C语言 — 自定义类型(结构体,联合体,枚举)

目录 1.结构体1.1 结构体类型的声明1.2 结构体变量的创建和初始化1.3 结构体成员的使用1.4 结构体的大小1.4.1 计算以下结构体的大小1.4.2 计算以下结构体的大小1.4.3 结构体中嵌套结构体的大小计算 1.5 位段1.5.1 使用位段计算结构体大小1.5.2 位段的缺陷 2.联合体2.1 联合体的…

【CATIA的二次开发16】根对象Application涉及撤销和重做事务管理相关方法

在CATIA VBA开发中,对根对象Application涉及撤销和重做事务管理相关方法进行详细总结,并且用不同形式展示出来。供大家后续开发全面了解Application对象的方法,以便在开发过程中快速查找和使用: 一、Application常用方法分类 1、基础控制与进程管理(3个方法) 方法名功能…

基于 Intel CNVi 接口 WIFI 产品介绍

CNVi是什么&#xff1f;CNVi&#xff08;Connectivity Integration&#xff09;&#xff0c;CNVi 即英特尔集成连接 I/O 接口&#xff0c;是英特尔专为 Wi-Fi 和蓝牙无线设备设计的一种连接架构。 架构原理&#xff1a; 在 CNVi 架构下&#xff0c;网络适配器中通常较大且昂贵…

【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)

#工作记录 一、基础工具与环境 开发工具 Git 或 GitHub Desktop&#xff08;代码管理&#xff09;Docker Desktop&#xff08;需启用 WSL2&#xff0c;容器化部署&#xff09;Python 3.11&#xff08;推荐版本&#xff0c;需添加到系统环境变量&#xff09;Node.js LTS&#xf…

零基础SEO优化操作全解析

内容概要 对于零基础的新手而言&#xff0c;SEO优化的系统性操作流程是入门的关键。本文以7个核心步骤为主线&#xff0c;从基础概念到实战应用&#xff0c;拆解搜索排名提升的核心逻辑。首先聚焦关键词挖掘的底层逻辑与工具实操&#xff0c;帮助建立精准的内容方向&#xff1…

【手搓一个原生全局loading组件解决页面闪烁问题】

页面闪烁效果1 页面闪烁效果2 封装一个全局loading组件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

MYSQL:主从复制原理及简单实现

概述 概念 主从复制&#xff1a;指一台服务器充当主数据库服务器&#xff0c;另一台或多台服务器充当从数据库服务器&#xff0c;主服务器中的数据自动复制到从服务器之中 基础是主服务器对数据库修改记录二进制日志&#xff0c;从服务器通过主服务器的二进制日志自动执行更…