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

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 worldAction->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会把这些模块功能一个个组合到游戏里,形成整体的游戏功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62629.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.UE基本操作及数字人工程模块组成(UE数字人系统教程)

1.Fay-UE5数字人工程导入 2.UE数字人语音交互 3.UE基本操作及数字人工程模块组成&#xff08;UE数字人系统教程&#xff09; 一、ue5基本操作 1、项目文件管理 2、关卡素材编辑 在关卡上&#xff1a;w、s、a、d移动&#xff0c;鼠标右键拖动换视角。 二、数字人工程模…

【PythonRS】植被显示增强(多光谱、正射、照片等)

很多时候我们需要某个区域的正射图&#xff0c;虽然正射图一般都运用了匀色的算法&#xff0c;整体色彩比较均衡。但如果研究区内有大量的植被&#xff0c;这个时候植被突出显示就很有必要了。所以今天给大家分享一下使用Python对多光谱、正射影像进行植被显示增强的算法。 一、…

k8s的yaml文件管理

声明式管理方法&#xff1a; 1.适合于对资源的修改操作2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff0c;json&#xff08;易于api接口解析&#xff09;3.对资…

内存快照:宕机后,Redis如何实现快速恢复?RDB

AOF的回顾 回顾Redis 的AOF的持久化机制。 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量不大。一般而言&#xff0c;只要你采用的不是 always 的持久化策略&#xff0c;就不会对性能造成太大影响。 …

伪原创神码ai怎么样【php源码】

这篇文章主要介绍了python汉化补丁包下载&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; ** Spyder汉化&#xff08;python汉化&…

打造个性化观影盛宴:对实时多兴趣召回的探索

包括 Tubi 在内的广告型点播流媒体服务&#xff0c;正在成为免费在线消费娱乐的重要组成部分。Tubi 拥有一个囊括电视剧、电影、体育和娱乐直播频道的海量视频内容库&#xff1b;同时&#xff0c;Tubi 为观众提供个性化的视频推荐&#xff0c;帮助观众快速找到想看的视频内容&a…

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

整理mongodb文档:改

个人博客 整理mongodb文档:改 求关注&#xff0c;求批评&#xff0c;求进步 文章概叙 本文主要讲的是mongodb的updateOne以及updateMany&#xff0c;主要还是在shell下进行操作&#xff0c;也讲解下主要的参数upsert以及更新的参数。 数据准备 本次需要准备的数据不是很多…

python --windows获取启动文件夹路径/获取当前用户名/添加自启动文件

如何使用Python获取计算机用户名 一、Python自带的getpass模块可以用于获取用户输入的密码&#xff0c;但是它同样可以用来获取计算机用户名。 import getpassuser getpass.getuser() print("计算机用户名为&#xff1a;", user)二、使用os模块获取用户名 Python的…

Centos7.9系统_亲测成功_磁盘满了_分区和挂载新盘_创建文件夹并挂载分区---Linux工作笔记057

由于在某些部署环境下,运维管理员,仅仅是给分配一些硬盘容量,但是并没有进行分区和挂载到对应的合适的目录下,因此这个时候就需要我们自己去处理了. 这个是自己亲测成功的:由于是后面记录的,尽量记录详细 free -h 查看一下内存情况 df -h查看 硬盘的使用情况,还有是否有没挂载…

以数据为中心的标记语言--yaml

&#x1f600;前言 本篇博文是关于以数据为中心的配置文件yaml的说明和应用&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&…

设计模式--策略模式

目录 一.场景 1.1场景 2.2 何时使用 2.3个人理解 二. 业务场景练习 2.1业务: 2.2具体实现 2.3思路 三.总结 3.1策略模式的特点&#xff1a; 3.2策略模式优点 3.3策略模式缺点 一.场景 1.1场景 许多相关的类仅仅是行为有异&#xff0c;也就是说业务代码需要根据场景不…