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

Lyra学习笔记 Experience流程梳理

目录

  • 前言
  • 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 总结与图示

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

相关文章:

  • DeepSeek 赋能数字孪生城市,筑牢应急管理智慧防线
  • VLAN的作用和原理
  • 【五子棋在线对战】一.前置知识的了解
  • 吴恩达MCP课程(2):research_server
  • Linux系统下安装配置 Nginx
  • Kanass入门教程- 事项管理
  • 机器视觉2D定位引导-合同要点重度讲解-技术要点及注意事项
  • Java-Character类静态方法深度剖析
  • C语言结构体的别名与创建结构体变量
  • 共享内存-systemV
  • Python 从入门到精通视频下载
  • 各种数据库,行式、列式、文档型、KV、时序、向量、图究竟怎么选?
  • 点云识别模型汇总整理
  • 【Doris基础】Doris中的Replica详解:Replica原理、架构
  • 华为OD机试真题——找出两个整数数组中同时出现的整数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 黄金价格查询接口如何用C#进行调用?
  • Nacos实战——动态 IP 黑名单过滤
  • AI书签管理工具开发全记录(七):页面编写与接口对接
  • 手写HashMap
  • AE已禁用刷新请释放Caps Lock
  • 与建设通相关的网站/软文兼职
  • 怎样给公司做免费网站/cps推广平台
  • 网站百度商桥/南宁企业官网seo
  • hbuilderx怎么制作网页/关键词优化外包服务
  • 网站建立网站/今天宣布疫情最新消息
  • 自己做的网站如何百度能搜索/兰州网站优化