UE5.2 LyraDemo源码阅读笔记(四)

上一篇(三)讲到在模式玩法UI点击Elimination进入淘汰赛模式。

UI选择点击Elimination后,触发蓝图W_HostSessionScreen的HostSession节点,有:

调用这个方法切换关卡后,会调用到LyraGameMode.cpp的

ALyraGameMode::InitGame(...)方法,也就是又开始重走一遍加载关卡相关内容的流程。

一、关于关卡Experience加载流程

1、切换关卡:CommonSessionSubSystem.cpp调用GetWorld()->ServerTravel(PendingTravelURL)切换到淘汰赛关卡。

2、初始化游戏:因为切换关卡,随后重新再触发ALyraGameMode.cpp的ALyraGameMode::InitGame()方法初始化关卡相关的Experience流程。

3、定位关卡ExperienceId:ALyraGameMode::HandleMatchAssignmentIfNotExpectingOne(),查找与当前淘汰赛关卡对应的ExperienceId。

4、设置ExperienceId:ALyraGameMode::OnMatchAssignmentGiven()里对ExperienceId进行赋值。

5、进行加载Experience数据资产:ULyraExperienceManagerComponent::SetCurrentExperience里对CurrentExperience赋值的同时,因为它设置了UPROPERTY(ReplicatedUsing=OnRep_CurrentExperience),所以对它进行赋值时会调用同步方法OnRep_CurrentExperience::OnRep_CurrentExperience进行资源加载。

6、初始化Experience数据资产:加载完成后会调用ULyraExperienceManagerComponent::OnExperienceLoadComplete(),对Experience里带的插件进行加载。

代码 ULyraExperienceManagerComponent.cpp

cpp 复制代码
void ULyraExperienceManagerComponent::OnExperienceFullLoadCompleted()
{
...
	auto ActivateListOfActions = [&Context](const TArray<UGameFeatureAction*>& ActionList)
	{
		for (UGameFeatureAction* Action : ActionList)
		{
			if (Action != nullptr)
			{
				//@TODO: The fact that these don't take a world are potentially problematic in client-server PIE
				// The current behavior matches systems like gameplay tags where loading and registering apply to the entire process,
				// but actually applying the results to actors is restricted to a specific world
				Action->OnGameFeatureRegistering();
				Action->OnGameFeatureLoading();
				Action->OnGameFeatureActivating(Context);
			}
		}
	};
	...
}

7、初始化Experience的插件列表:插件加载完成后,调用ULyraExperienceManagerComponent::OnExperienceFullLoadCompleted()这里会连续对插件里的Action列表进行注册、加载、激活。随后发出通知OnExperienceLoaded.Broadcast(CurrentExperience)。

8、生成玩家Pawn:Experience加载完成后发出通知后,触发LyraGameMode::InitGameState注册的方法ALyraGameMode::OnExperienceLoaded(const ULyraExperienceDefinition* CurrentExperience),接着就在这个方法里调用RestartPlayer(PC)生成对应的玩家实体。

二、关于关卡Experience内容

B_ShooterGame_Elimination的定义里包含了要用到的插件和Action集合。

这里会启用一个叫ShooterCore的插件。插件了除了状态,同时也定义了Action的集合

整个游戏的玩法功能,都在这个Experience定义的Action里的模块了,不同类型的Action会把这些模块功能一个个组合到游戏里,形成整体的游戏功能。

相关推荐
换个昵称2几秒前
大模型学习8下-高性能推理引擎vLLM学习笔记
笔记·学习·vllm
LONGZHIQIN24 分钟前
C#基础复习笔记
开发语言·笔记·c#
得闲喝茶40 分钟前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
智慧景区与市集主理人2 小时前
巨有科技:市集笔记内容分发,低成本打造本地流量曝光矩阵
大数据·笔记·科技
IDIOSF3 小时前
Apple Notes Liberator:把 Apple Notes 里的笔记搬出来
笔记·其他
ljt27249606613 小时前
CPU:从底层电路到高性能执行架构
笔记
普普通通的一名码农3 小时前
TPS6120芯片说明
驱动开发·笔记·芯片手册
Amazing_Cacao4 小时前
CFCA精品可可工艺师初级校准:暴力破解机器黑盒,实现物理参数与最终风味的精准对齐
笔记·学习
阿米亚波4 小时前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
杨逢昌工厂6S管理4 小时前
28- 杨逢昌:制造企业仓储6S反复混乱解决方案——四维定置标准化管控体系,让物料混放、通道堵塞等重复性乱象减少90%
大数据·经验分享·笔记·职场和发展·制造·学习方法