Lyra学习笔记 Experience流程梳理

目录

  • 前言
  • [1 创建](#1 创建)
  • [2 加载](#2 加载)
  • [3 Deactivate](#3 Deactivate)
  • [4 总结与图示](#4 总结与图示)

前言

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

之后ULyraExperienceManagerComponent简称为EMC

1 创建

完事开头难,首先找到了管理Experience的组件,那么它的初始化位置在哪?

其作为ALyraGameState的成员,在构造函数中用CreateDefaultSubobject创建。

cpp 复制代码
//LyraGameState.h
private:
	// Handles loading and managing the current gameplay experience
	UPROPERTY()
	TObjectPtr<ULyraExperienceManagerComponent>
	ExperienceManagerComponent;

//LyraGameState.cpp
ALyraGameState::ALyraGameState(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	...
	ExperienceManagerComponent = CreateDefaultSubobject<ULyraExperienceManagerComponent>(TEXT("ExperienceManagerComponent"));
	...
}

2 加载

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

cpp 复制代码
//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 总结与图示


相关推荐
蜡笔小电芯14 分钟前
【CAN总线】STM32 的 CAN 总线通信开发笔记(基于 HAL)
笔记·stm32·单片机
YGY Webgis糕手之路3 小时前
OpenLayers 综合案例-底图换肤(变色)
前端·经验分享·笔记·vue·web
别惊醒渔人3 小时前
前端优化之虚拟列表实现指南:从库集成到手动开发
前端·javascript·vue.js·笔记
Dream Algorithm3 小时前
“量子通信”
笔记·信息与通信·量子计算
KD杜小帅4 小时前
日志分析-windows日志分析base--笔记ing
笔记
Fine姐5 小时前
博弈论03——混合纳什均衡的收益求法
笔记·算法
孞㐑¥5 小时前
Linux之网络部分-应用层协议 HTTP
linux·开发语言·c++·经验分享·笔记
Jay Kay6 小时前
从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
人工智能·笔记·语言模型
KD杜小帅7 小时前
2025年Solar应急响应公益月赛-7月笔记ing
笔记
Star在努力8 小时前
15-C语言:第15~16天笔记
c语言·笔记·算法