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


相关推荐
巴伦是只猫5 分钟前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
X_StarX6 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
MingYue_SSS6 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
巴伦是只猫6 小时前
【机器学习笔记 Ⅱ】1 神经网络
笔记·神经网络·机器学习
weixin_437398216 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
teeeeeeemo8 小时前
回调函数 vs Promise vs async/await区别
开发语言·前端·javascript·笔记
致***锌11 小时前
期权标准化合约是什么?
笔记
Wilber的技术分享12 小时前
【机器学习实战笔记 14】集成学习:XGBoost算法(一) 原理简介与快速应用
人工智能·笔记·算法·随机森林·机器学习·集成学习·xgboost
V我五十买鸡腿14 小时前
顺序栈和链式栈
c语言·数据结构·笔记·算法
麟城Lincoln14 小时前
【RHCSA-Linux考试题目笔记(自用)】servera的题目
linux·笔记·考试·rhcsa