Unreal 5 Lyra初学者游戏包概览笔记

Lyra初学者游戏包相关的官方视频有两个:

  1. Lyra初学者游戏包概览 https://www.bilibili.com/video/BV16B4y197Zy/
  2. Lyra跨平台UI开发 https://www.bilibili.com/video/BV1mT4y167Fm/

这个笔记主要记录的是Lyra初学者包概览笔记的相关内容。里面介绍了如何创建关卡、输入、武器和技能。
这个笔记只记录一些对我有用的信息,如果需要查看完整内容,还请查看官方视频。
项目可以直接在官方引擎找到免费下载,比其它教程只有视频没有项目好多了

在这里插入图片描述
基础的元素:

  • 角色和Pawn是在游戏中控制的游戏对象
  • Controller 控制,代表着如何控制pawn 客户端向服务器发送请求的通道
  • 玩家状态 储存着其它玩家需要知道的关于你的信息 比如玩家的得分情况,血量
  • 游戏状态 用来存储游戏的综合信息 比如游戏阶段和剩余时间

这些类很容易产生结构性问题,造成耦合问题,自此引出模块化。
在这里插入图片描述

项目里面包含五种案例:

  1. UI
  2. 淘汰模式
  3. 抢据点模式
  4. 炸弹人模式
  5. 默认

在这里插入图片描述
Lyra还提供了联网功能,

  • 快速游戏可以寻找到当前已经建立的房间,如果没有则自己创建一个
  • 创建一个游戏 本地或者联网的 真人或者机器人的
  • 寻找别人创建的房间

然后接下来讲解了一下每种游戏的玩法

资源管理

在Lyra中,资产管理都是在GameFeatureData中管理,游戏逻辑可以在运行时动态管理他们是否激活,而不是必须需要预先设置。在Lyra中由Experience相关的类去控制,这个下面会讲。
这个类还列出了激活前需要的操作,就是Actions列表的相关操作。它们会在状态切换成激活的时候执行。
并且可以扩展资产管理器Asset Manager,这个会单独出一篇文章。
在这里插入图片描述
Actions是实现模块化设计的一个重要组成部分。它能够包含在GameFeatures和Experiences中,将负责在启用或禁用时预先加载必要的资产和运行代码。
说的就是上面那个操作的列表,常见的有,Add Abilities 添加技能 Add Components 添加组件 Add Widgets 添加ui控件
在这里插入图片描述
添加技能是给pawn对象添加新的能力
添加组件可以给不同类型的actor增加新的逻辑
添加控件是在屏幕上添加新的用户界面

模块化

如果要彻底弄懂这一块,需要去查看c++源码,我这里只对视频里面涉及到的东西做一下总结。
模块化结构首先要有一个设置游戏功能插件的入口,在Lyra游戏中,一张地图的主入口就是在Lyra User Facing Experience Definition 类里面描述,在这个文件中,指定了一个玩法还有地图等所有的内容。Lyra User Facing Experience 的文件会在ui地图列表中加载,ui拿着相应的数据,生成在前端显示的内容,如果点击了相应的地图,也会根据里面数据去加载关卡内容。
它实现了将玩法和地图相结合。
在这里插入图片描述
Map ID :需要加载的地图,通过点击ui进入游玩的地图场景
Experience ID :当前地图玩法相关的内容
Extra Args :作为URL选项传递给游戏的额外参数
Tile Title :在ui上面显示的主标题
Tile Sub Tile :在ui显示的副标题
TIle Description :在ui显示的地图描述
Tile Icon :在ui上显示的图标
Is Default Experience :是否是默认玩法,如果设置为true,此地图可以快速匹配,并在ui排列中靠前显示
Show In Front End :设置为true,此地图将在地图ui列表中展示
Record Replay :记录回放,设置为true,将记录比赛的回放记录。
Max Player Count :最大玩家数
Loading Screen Widget:场景加载时的ui设置
在这里插入图片描述
上图就是设置以后在ui里面的显示效果。

里面的Experience ID 定义玩法和规则,参数是一个蓝图类,Lyra Experience Definition,这个蓝图内设置了四种内容,玩法,玩家或者机器人控制的pawn
在这里插入图片描述
下面的这个是俯视角炸弹人玩家的蓝图类
在这里插入图片描述

Pawn的数据

Pawn的数据类型是LyraPawnData
在这里插入图片描述
Pawn Class 实例化可以操控的角色的类
Abilities 赋予玩家的初始技能集
TagRelationship Mapping 技能关系映射输入配置
Input 角色操控配置,主要就是什么按键会触发
Default Camera Mode 使用的相机模式

扫描二维码关注公众号,回复: 15787605 查看本文章

技能集

技能集的数据类型是 LyraAbilitySet,里面包含技能游戏玩法效果(gameplay effects,简称GE,是Abilities改变自己或别人的Attributes 和GameplayTags的途径 )
在这里插入图片描述
技能集可以通过英雄数据赋予、通过experiences或游戏中的actions提供,也可以通过装备提供。
技能可以让角色执行新的主动技能或被动技能
主动技能包括跳跃、扔雷等。
被动技能是指可以自动触发的技能,比如死亡后自动复活
玩家身上的属性是以数值的形式公开给技能系统的,比如血量,炸弹数量

角色相关

新的测试模型Manny Quinn它们是用MetaHuman骨骼创建出来的,包含丰富的动画设置,增加了新的重定向,可以将动画定向到任意骨骼网格体上面。
(Linked Animation)链接动画层允许动画蓝图以模块化的方式构建具有高级运动系统的角色,还能让游戏实现更好的内存管理,因为大量的动画层可能不会同时加载
Distance matching(距离匹配是通过移动输入的实际位移驱动动画播放位置,表现出速度与动画播放位置相对于的现象,以解决起步或停步时的滑步问题) 和 stride warping(步幅适配是动态调整角色的动画步幅来匹配胶囊体移动速度的一种姿势扭曲节点。)相结合可以让动画适应不同的玩家移动速度
Orientation warping(方向适配是为了用4方向移动实现360度无死角移动的技术。是Paragon用于解决混合空间的融合不可靠的问题提出的)是为了让动画适应不同的运动角度
Turn in place (原地转身)是可以让原地转身的并且没有移动的玩家呈现自然的原地转身动画,在转动幅度过大时播放重新定位动画。
Foot placement via control rig (脚步放置系统)会尝试在动画循环中在角色接触地面的时候,让角色双脚平稳的落在不同的表面,不会穿透地面。

使用自定义角色

Simple Cosmetics System (简单的换装系统)实现了显示角色的替换功能,将actor添加到骨骼上面,下图是通过调用AddCharacterPart方法,选择机器人设置显示。
在这里插入图片描述
并且在偏好向这里,你还可以直接替换模型进行测试
在这里插入图片描述
如果实现使用角色修改,我们首先需要模型,直接从metahuman创建的模型
在这里插入图片描述
然后再偏好向那里,可以直接设置,这属于调试的方式
在这里插入图片描述
蓝图有了,但是metahuman不自带动画的,我们需要使用制作一个动画蓝图,动画蓝图内也没什么内容,就是从网格体重定向姿势,姿势在Lyra的网格体上面去获取,IK重定向器资产直接选择metahuman带的RTG_metahuman,关于ik重定向我的其它文章已经讲过这里就不再多说。
在这里插入图片描述

再次进入游戏,发现,所有的角色都替换成了你设置的角色样子,并且还无法区分队伍
在这里插入图片描述

修改队伍颜色

Team Color System(队伍颜色系统)支持你修改队伍的材质和Niagara系统,实时切换,修改完数据直接查看修改效果。
要实现角色根据队伍颜色变动,需要先找到角色身上的材质
在这里插入图片描述
在材质上面找到影响颜色的属性
在这里插入图片描述
这里有两种方式实现颜色修改:

  1. 在主材质里面将颜色属性名称修改成队伍资产里面的名称(不推荐)
  2. 将名称增加到队伍资产

队伍资产数据路径在:
在这里插入图片描述
一般用到的就是蓝和红,在红色和蓝色队伍配置里面分别增加一项颜色配置
在这里插入图片描述
在这里插入图片描述
接着,再重新运行游戏,你会发现角色身上只要颜色配置是这个名称的材质属性值都会变更掉。
在这里插入图片描述
实现原理,在类B_Hero_ShooterMannequin中
在这里插入图片描述
在事件开始运行时,会监听队伍变动
在这里插入图片描述
这个事件会去获取队伍id和队伍数据,并调用切换事件
在这里插入图片描述
如果角色的部件切换,也会触发相关事件
在这里插入图片描述
在On Team or Cosmetics Changed函数中,处理了两部分,第一部分是后处理,设置描边颜色,更新队伍的模板测试(渲染效果)
在这里插入图片描述
另一部分就是调用C++写的函数,用来修改当前使用角色身上的材质
在这里插入图片描述

增强输入

增强输入我之前写过相关的文章,也是之前看这个视频了解到的,可以直接将一整套的输入事件修改掉。
链接地址:https://blog.csdn.net/qq_30100043/article/details/130925890
这里再多嘴一句,在增强输入中,Actions相当于是事件触发的事件,而输入上下文是将键位事件和Actions绑定的媒介,你可以制作多个输入上下文,比如,制作控制角色的上下文,控制车辆的上下文,并且还可以在控制车辆时,在里面设置相应的让角色做出某些动作的action事件触发。有多个上下文以后,你可以通过当前的状态直接切换上下文来实现不同的操作。

Lyra场景搭建

新建一个基础关卡
在这里插入图片描述
在Tools文件夹下面,会发现Lyra搭建好的程序化建模蓝图
在这里插入图片描述
使用Panel蓝图创建地面
在这里插入图片描述
拖入场景中,选中Handle,可以拖成理想的大小
在这里插入图片描述
右侧细节的数值也会相应的变动
在这里插入图片描述
在生成栏目,设置路径名称,开启Nanite,并点击Generate New Static Mesh 生成静态网格体
在这里插入图片描述
在物体上面右键,在脚本化Actor行为下面有个转换为静态网格体,我们就可以使用此静态物体去拼接场景了
在这里插入图片描述
如果发现这个静态网格体不行,想修改我们还可以再将静态网格体转换回来
在这里插入图片描述
这个网格体每个长宽10米也就是1000厘米(虚幻里面的单位是厘米),我们可以摆出自己需要的样子
在这里插入图片描述
学会了这种方法,你可以根据自己的需求去搭建出来理想的关卡,关于那些武器血量包等拾取的蓝图在ShooterCore内容中的Blueprint文件夹中,如果没有可以在右边设置显示插件内容即可。你需要将场景存储到他们一样的文件夹内,我放到内容文件夹,貌似无法将这些蓝图添加进入,放到Plugin目录下面就没问题了。
在这里插入图片描述
地图制作完成以后,需要设置地图游戏玩法,在Default Gameplay Experience设置为B_ShooterGame_Elimination,这个是淘汰模式使用的玩法
在这里插入图片描述
然后就是设置玩家出生点,点击场景添加物体按钮,搜索Lyra,会找到所有Lyra相关的类,然后选择LyraPlayerStart
在这里插入图片描述
出生点添加完成,还不能让机器人移动,那么需要添加导航网格体体积
在这里插入图片描述
调整尺寸,让导航网格体体积包围整个场景,按p可以查看导航网格体体积生成的可移动区域。
在这里插入图片描述
就是在偏好设置里面,找到Lyra Bots,第一个是设置生成数量,不勾选就是所有的出生点都会生成,Allow Player Bots to Attack 机器人是否可以攻击
在这里插入图片描述
直接点击运行游戏,就可以实现玩法。

Lyra角色创建逻辑

在制作地图时,我们添加了GamePlay Experience 游戏玩法体验来确定地图的玩法,这个文件在之前简单介绍过,就是确定场景的规则,以及玩家控制角色规则
在这里插入图片描述
比如在Actions这里,添加了场景相应的技能 组件和ui,AbilitySet_Elimination里面有两个技能,一个是解算面板,另外一个就是复活,将它们设置为了技能。组件这里就是给游戏状态添加组件或者给控制器添加,比如给控制器添加了随机生成Character的控件,ui这里则是添加了淘汰模式上面独有的计分的ui。
在这里插入图片描述
在pawn数据这里,有默认的pawn的类,以及pawn所有的技能集输入配置以及映射,还有相机模式
在这里插入图片描述
技能集里面罗列出来了pawn所拥有的技能,技能的蓝图实现,技能等级,触发的tag
在这里插入图片描述
比如技能就是直接用蓝图实现的
在这里插入图片描述
而这个tag,在输入里面会有相对应的增强输入的tag对应,没有输入对应,你有技能也无法触发。
在这里插入图片描述
然后,pawn数据里面的Tag Relationship Mapping 则是标记关系映射,比如当前tag会锁定其它的tag无法触发,触发的会直接取消等等,里面就是描述的tag之间的关系。相当于输入触发pawn去调用tag事件,tag事件判断关系,能够触发会去触发相应的蓝图去实现逻辑这么一个流程的蓝图。
在这里插入图片描述
最后附上它们之间的关系图,输入映射将键位对应InputAction,InputConfig将InputAction对应InputTag,而InputTag对应一个技能,层层递进的感觉。
在这里插入图片描述

Lyra的武器物品的结构

Lyra内置的武器类在Plugins文件夹下面Weapon文件夹和Weapons文件夹中,里面包含了游戏中使用了手枪,霰弹枪和手雷
在这里插入图片描述
拿手枪举例,此定义了拾取手枪以后所需要的数据,图标,武器模型,状态动画等。
在这里插入图片描述
第一个片段是可以装备的武器的定义,后面主要就是详细说它
在这里插入图片描述
第二个则是武器的图标和子弹的图标
在这里插入图片描述
第三个片段定义了武器的弹夹容量,当前弹夹剩余子弹,以及备用子弹数量,如果你是回血包,还可以在这里设置回血量什么的。
在这里插入图片描述
第四个片段是武器生成器显示的图标和底座颜色
在这里插入图片描述
第五个片段则是ui,显示的准星样式,和准星旁边的弹夹样式
在这里插入图片描述
手枪会默认给角色创建,视频也没说怎么默认添加到角色身上的。
接下来看一下上面第一个片段装备武器的定义WID_Pistol,这是一个纯数据蓝图
在这里插入图片描述
Actors to Spawn 则是装备武器时创建的相关配置,它是一个数组,意味着我们后面可以一次性装备多个武器左右一个有手一个
Actor to Spawn 武器拿在手上时的骨骼网格体蓝图类
Attach Socket 将武器添加到的骨骼命名
Attach Transform 添加到骨骼上时的相对位置变换
InstanceType 定义这是一件物品,这里定义了它是一把手枪其它可以定义见下图
在这里插入图片描述
在B_WeaponInstance_Pistol类中,它设置了子弹的行走路线,伤害,一次射击多少子弹,射程等。
在这里插入图片描述
Bullets Per Cartridge 每次射击的子弹数量,手枪一次是一发,但是霰弹枪一次会生成多个子弹
Max Damage Range 最大可以造成伤害的距离
Bullet Trace Sweep Radius 生成的子弹的碰撞体的半径,用于检测子弹与目标的碰撞检测使用
Distance Damage Falloff 距离衰减曲线
Material Damage Multiplier 经过测试是爆头的伤害倍率
在这里插入图片描述
Equip 为装备武器蒙太奇动画
Unequip 为收回武器蒙太奇动画
Melee 为使用武器敲击敌人的蒙太奇动画
在这里插入图片描述
射击的配置 Fire Params 配置项设置采用了过热了,准确率就会下降
Spread Exponent 扩散指数,射击时准星的准确率会扩散,指数约高,后坐力影响就越低。
Heat to Spread Curve 扩散曲线,x轴的值设置武器最小到最大的扩散范围,y轴用来定义最小到最大的扩展角度
Heat to Heat Per Shot Curve 每一枪增加的扩散范围,正常情况是一条曲线,如果只有一个值代表每一枪都会增加
Hea to Cool Down Per Second Curve 每秒恢复扩散范围值
Spread Recovery Cooldown Delay 扩散范围恢复延迟时间
Allow First Shot Accuracy 是否可以允许第一枪准确率完美朝着准星

WID_Pistol 属性 Ability Sets to Grant 持有当前武器会赋予角色的技能集,当玩家装备此武器时,会使用技能集覆盖当前的持有的技能,这个里面有射击,换弹和自动换弹三个技能,里面也包含了对应的蓝图实现。Experience中的技能集是在运行时创建的,这意味着我们也能够重载它们。
在这里插入图片描述
GA_Weapon_Fire_Pistol是一个纯数据蓝图,里面配置射击时的一些数据
在这里插入图片描述
GE Damage 是游戏伤害效果
Character Fire Montage是角色使用此武器射击时播放的动画
Fire Delay Time Secs 是射击时的时间间隔
Auto Rate 为开火速率

在Lyra中创建一把自定义的武器

先创建一个物品定义的类,命名为ID_SMG
在这里插入图片描述
然后先设置名称,添加片段,第一个先添加一个可装备的物品,装备的内容后面再创建
在这里插入图片描述
第二个片段就是装备后武器的icon的配置,这些内容会去修改ui上面的图标和名称
在这里插入图片描述
第三个片段就是设置弹药的数量
在这里插入图片描述
第四个片段就是添加武器的准星
在这里插入图片描述
第五个片段增加拾取拾取武器的样式,这里修改了颜色和名称
在这里插入图片描述

这个类定义完了,还有一项没有设置,那就是拾取物品的定义,先创建一个类继承至LyraEquipmentDefinition,命名为WID_SMG,这个类里面需要定义物品类型,拾取后赋予玩家的技能集,以及装备时显示的模型设置
在这里插入图片描述
生成的pawn这里还是按照手枪的设置
在这里插入图片描述
技能集这里,赋予玩家的技能,我们需要重新创建一个类
在这里插入图片描述
创建一个数据资产
在这里插入图片描述
数据资产实例的类选择LyraAbilitySet,命名AbilitySet_SMG
在这里插入图片描述
打开需要在里面添加三个技能,装备武器,收回武器,以及自动换弹
第一个设置tag为自动射击
在这里插入图片描述
第二个设置tag为reload,换弹
在这里插入图片描述
第三个设置为自动换弹,不需要tag触发,所以直接设置类,它会自动检测是否还有弹药,是否还有备用弹药,弹夹是否空了
在这里插入图片描述
接下来就是实现开火和换弹的逻辑,先实现开火,创建一个开火的类基础至GA_Weapon_Fire,命名GA_Weapon_Fire_SMG
在这里插入图片描述
在类里面修改默认值,先修改开火动画,自动速率,以及触发射击的tag
在这里插入图片描述
在消耗哪里,还需要设置当前武器的弹夹数量减少
在这里插入图片描述
设置完成编译然后设置到AbilitySet_SMG里面。
在这里插入图片描述

接下里制作换弹逻辑,换弹逻辑直接基于手枪的类作为父类创建,命名GA_Weapon_Reload_SMG
在这里插入图片描述
里面只将换弹的播放速率提高了,加快了换弹速度
在这里插入图片描述
然后设置到ABilitySet上面
在这里插入图片描述
武器实例那里还没有重新设置,创建一个基于手枪的武器实例,命名B_WeaponInstance_SMG
在这里插入图片描述
里面修改一下手枪的扩散速率,修改曲线,上面debug显示的数值也会跟着变动。
在这里插入图片描述
冷却速率从手枪的10改为3,延迟冷却从0.2改为0.5
在这里插入图片描述
在WID_SMG里面设置实例类型为刚才创建的smg
在这里插入图片描述
最后,如果要添加到武器生成底座上面,还需要制作一个生成的数据基于LyraWeaponPickupDefinition,命名WeaponPickupData_SMG
在这里插入图片描述
然后定义里面的数据,武器再生事件,如果为0,则不会再生,设置生成器上面显示的武器,以及物品栏物品定义为创建的ID_SMG
在这里插入图片描述
拖入场景中一个实例
在这里插入图片描述
设置相应的配置项,也可以修改颜色等。
在这里插入图片描述

在Lyra中创建一个新的技能

创建一个新的文件夹 命名为ForceField
在这里插入图片描述
创建一个技能类,命名为GA_ForceField
在这里插入图片描述
里面有两个事件,分别是激活技能事件和结束技能事件
在这里插入图片描述
将类的默认值Replication Policy 修改为Replicate,这个技能将会复制给每一个实例,相当于每个角色都可以释放
在这里插入图片描述
创建节点 Get Lyra Character from Actor Info,它可以输出拥有这个技能角色
在这里插入图片描述
获取到角色周围一定范围内的所有的pawn
在这里插入图片描述
如果获取到了内容,将进行循环处理
在这里插入图片描述
接下来,要获取队伍子系统,这个子系统提供很多关于队伍相关的函数
在这里插入图片描述
比较自身和比对的角色是否同一个队伍,如果不同,将触发后续逻辑造成伤害
在这里插入图片描述
获取到角色技能组件
在这里插入图片描述
调用给目标造成伤害的节点
在这里插入图片描述
在队伍不同时,将获取目标的技能组件,并对技能组件造成伤害,遍历完成结束事件。
在这里插入图片描述
施加的伤害的类还没有设置,这里我们可以自己创建一个新的
在这里插入图片描述
或者直接使用伤害基础类GE_Damage_Basic_Instant,创建子类GE_ForceField
在这里插入图片描述
在类的默认值这里,伤害类型选择瞬间,还有无限持续,还有持续一定量级的
在这里插入图片描述
然后修改了造成的伤害
在这里插入图片描述
编译后,将类设置上去。
在这里插入图片描述
接下来,将实现按键触发,将Emote触发的跳舞事件修改掉,原来的是这样的
在这里插入图片描述
在场景中找到设置的玩法数据
在这里插入图片描述
在里面找到生成默认pawn的数据
在这里插入图片描述
再进入基础技能
在这里插入图片描述
看到设置的emote的配置,设置的是这样的,Emote的tag是和B键绑定的
在这里插入图片描述
把技能改成自定义的技能
在这里插入图片描述
进入场景然后再敌人旁边按B键,三下击败,完美实现。

猜你喜欢

转载自blog.csdn.net/qq_30100043/article/details/131522136