UE 5 GAS 在项目中通过数据初始化

news2024/11/29 20:42:16

近期,在制作多角色,考虑到角色和角色之间有很多共用的内容,正常项目中的实现的话,会通过数据的方式去实现角色初始化,接下来介绍一下,我的实现方式。
在这里插入图片描述
以上是我设置的相应的数据,上面最简单的名称,介绍还有显示图片,性别。

流程

下面两个比较重要的就是配套动作重定向和骨骼网格体模型。使用动画重定向的原因是因为你总不能每个模型准备一套动画吧,那工作量就太大了,所以,我研究了一套实现多个不同制作方式的模型,可以使用一套动画来实现多个模型的重定向,这个可以后面文章发。
接下来就是技能的配置,这一块是为了配合GAS使用的,Init是为了初始化角色的基础属性使用的,SAGameplayAbilities则是角色拥有的默认技能,比如攻击,瞄准这种基础技能。
DefaultAbilities 是一些技能的数据对象,它也是技能,但是还包括一些其它的数据。这两个技能的区别是前面的是基础的动作,不是一个单独的技能,而后者则是一个单独的技能,不是角色必须的,比如丢雷技能。
DefaultWeapon是角色携带的默认武器,里面包含武器的相关数据,ui图片,模型,弹夹容量射速什么的。
在这里插入图片描述
ItemSlotsPerType是从官方ActionPRG抄过来的一个属性,这是一个映射,键是主资产类型,值是整型,这个是代表角色可以拥有的对应资产的个数。
在这里插入图片描述
这个角色资产数据设置在GameInstance上面,在打开游戏时,会使用资产管理器加载对应的资产,然后在ui里面选择使用哪个角色,然后通过选择设置到GameInstance上,随之在加载地图创建角色时,可以在GameInstance上去获取。因为游戏实例有且只有一个,而且是在打开游戏时会实例化,所以,可以在GameInstance上面去存储一些全局使用的数据。
在这里插入图片描述
游戏实例里面加载主资产还有地图加载功能,而在进入游戏后的UI放在一个场景里面,我们可以同归加载场景来实现设置UI。
进入游戏后的UI主要就是游戏游玩之前选择以及配置游戏的相关画面和操作配置。
在UI场景中,选择完地图和角色等进入游戏前的配置,都将存储在GameInstance上面,因为切换场景时,游戏模式,角色控制器那些内容都会被清除掉。
然后在进入新关卡时,再创建新关卡对应的游戏模式相关Character,以及PlayerController。
在这里插入图片描述
在PlayerController中,获取控制的Character,以及设置输入,UE5新增加的输入增强输入。
在这里插入图片描述
在角色控制器中,也用于创建HUD,并更新HUD,填充插槽是为了限制当前角色可以携带的技能和武器的数量。初始化角色数据就是在这里去初始化角色的数据资产所携带的内容。
在这里插入图片描述
初始化角色数据这里就是从游戏实例里面获取到角色数据,然后遍历数据,创建相应插槽的技能。当然,在PlayerController里面初始化的数据都是后面需要再次操作的,后面对技能和武器都会在战斗中进行修改和增加,所以放到了PlayerController中,而那些初始化以后,不需要再变动的,直接放到了Character上面,
在这里插入图片描述
Character作为GAS的OwnerActor(所有)和AvatarActor(应用),需要在里面实现对技能的相应操作,所以像初始化技能都放置在了这里面。

技能控制

我需要使用UE的GAS的原因有三点:

  1. 技能和技能之间逻辑处理,可以通过GameplayTag轻松处理技能之间的逻辑判断
  2. 技能的数值增长问题,GAS可以很简单的处理数值问题,比如只持续一段时间的增益效果
  3. 监听数值变化回调,GAS可以通过Task监听值的变化,在值变化的时候修改

拿到角色数据以后,在PlayerController里面,对角色技能数据进行了第一次初始化,初始化的主要是初始化角色的技能和武器。为什么选择在PlayerController里面初始化呢,因为在PlayerController里面控制着HUD相关,技能和武器都需要在HUD里面显示,所以在PlayerController里面直接初始化了。

我的个人理解里面 GameMod来确定关卡的玩法,里面有玩法相关的规则逻辑。PlayerController用于操控Pawn的相关逻辑,里面含有相同的控制逻辑,Pawn就是控制的Character,而PlayerState里面存储角色状态,一般会用在角色可以重生,重新生成角色的玩法中,防止角色的数据丢失。
GAS一般会放到PlayerState或者Character两种,如果联网游戏,或那种有复活机制的,推荐放到PlayerState上面,独立游戏这种可以直接放到Character上面。GAS的脚本ASC附加的Actor,会将其命名为OwnerActor,而GAS影响的Actor,会被取名为AvatarActor,OwnerActor和AvatarActor可以是同一个Actor。

在这里插入图片描述
在技能数据这里,设置了一些技能相关配置,比如有没有冷却,可以添加的GE,应用技能时附加的GA
在这里插入图片描述
然后这一块主要是和UI相关的,用户控件,显示图标名称等等。最后还有主资产类型。
在这里插入图片描述
按键触发使用了输入绑定,可以用来监听按键来触发技能,还有冷却,使用GE去实现的,然后通过自身的某个数值来确定冷却。

武器系统

最早我自己实现了武器相应的功能,但是功能有限,好多功能实现起来很复杂,在切换使用GAS以后,我又重新实现了一遍,将技能触发,属性相关都写到了GAS里面。

通过学习官方文档,我使用的方式就是将武器单独属性存储在武器上面,比如当前武器弹夹内拥有的子弹,当前武器的开火模式。当切换到当前武器时,将通过当前武器的身上的的属性,来设置武器的通用的属性。有个重点就是,后面考虑到武器可以加强,比如所有的步枪的伤害提升百分之10这种需求,我的实现方式通过GE挂一个Tag,设置武器属性加成的GE通过判断Tag来实现,装备武器,附加对应的Tag,对应的GE起作用。

接下来看一下,武器配置项的内容
在这里插入图片描述
WeaponTagClass为一个GE,它的作用就是为GAS添加一个Tag,用来标示当前的武器Tag,WeaponType是当前武器的类型设置。WeaponSlot是放置的槽位,之前是考虑到武器只能放置到固定的槽位,后来放弃了这个想法,可以随意装备武器。下面还有武器装备时的骨骼插槽的位置,还有武器的动画,名称描述。
在这里插入图片描述
这里主要是当前武器使用的准星样式,从官方游戏Lyra里面扒的。
在这里插入图片描述
蓝图类,武器蓝图和弹夹蓝图类,还有拾取物蓝图类
在这里插入图片描述
射击时需要用到的数据
在这里插入图片描述
武器相关的角色蒙太奇动画,mapTime是霰弹枪独有的,因为它需要将换弹蒙太奇分开
在这里插入图片描述
根据蒙太奇的分块,然后根据分块设置MapTime,映射是根据名称对应播放的位置,霰弹枪装弹时先下膛,然后触发循环装弹动画,等弹夹装完以后再接着上膛。
在这里插入图片描述
武器也有可以添加的GE和GA

在初始化武器时,通过PlayerController的创建武器去触发Character身上的武器组件(以前旧的组件,懒的换地方了)
在这里插入图片描述
在这里插入图片描述
寻找空的槽位,根据蓝图类创建Actor附加到Character身上,武器并根据数据初始化。
在这里插入图片描述
在这里插入图片描述
初始化一个是保存武器数据,创建武器弹夹,另一个就是设置武器内默认弹夹数量,和武器模式。

武器技能

在这里插入图片描述
角色拥有的默认的武器技能,技能根据条件判断是否触发,也可以通过重载CanActive判断,切换武器的GA还是通过输入触发的,因为武器有多个,没办法绑定一个,甚至还可以通过滚轮切换武器。
在这里插入图片描述
切换武器可以根据需求收回武器,或者切换持有的武器。
在这里插入图片描述
装备武器时,将武器放置到手上,触发回调,回调主要用于HUD的更新。
在这里插入图片描述
更新属性首先就是设置武器的Tag
在这里插入图片描述
然后就是根据武器数据,去设置默认的Attribute,当然,武器拥有的子弹数量,还是直接从蓝图实例上获取。
在这里插入图片描述
设置的一些属性,每种类型的子弹不会在武器切换时重新设置,其它设置时触发。

这里用到的特性就是Attribute的CurrentValue和BaseValue,切换武器时,是通过GE的Instant修改BaseValue,而提升属性则是通过GE的Infiniti修改CurrentValue,获取的时候,直接获取CurrentValue。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式行为模式-命令模式

文章目录 前言定义结构工作原理优点适用场景消息队列模式Demo实现分写业务总结 前言 定义 命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,从而使你可以使用不同的请求、队列或者日志请求来参数化其他对象…

服务器端污染属性反射提升权限

污染属性反射检测服务器端原型污染 通过服务器端原型污染提升权限 Lab: Privilege escalation via server-side prototype pollution 必要知识点 开发人员很容易陷入的一个陷阱是忘记或忽略 JavaScript 循环迭代对象的所有可枚举属性这一事实,包括它通过原型链继…

医学案例|线性回归

一、案例介绍 某医师预研究糖尿病患者的总胆固醇和甘油三酯对空腹血糖的影响,某研究者调查40名糖尿病患者的总胆固醇、甘油三酯和空腹血糖的测量值如下,试根据上述研究问题作统计分析。 二、问题分析 本案例想要研究一些变量(总胆固醇和甘油…

PocketMiner:基于深度学习发现蛋白的隐式口袋

文章目录 1. 文章简介2. 前言3. 方法3.1 模型框架 4. 结果4.1 已知隐式口袋在分子动力学模拟分析迅速打开4.2 图神经网络模型能够准确预测模拟中口袋的动态变化4.3 隐式口袋数据集数据集揭示了新的隐式口袋形成的模式4.4 PocketMiner能够从无配体的蛋白结构中精准预测预测口袋4…

2007-2022年上市公司污染排放数据/2007-2022年上市公司污染排放水平、污染排放量数据

2007-2022年上市公司污染排放数据/2007-2022年上市公司污染排放水平、污染排放量数据 1、时间:2007-2022年 2、指标:证券代码、year、化学需氧量、氨氮排放量、总氮、总磷、水体综合污染当量对数、二氧化硫、氮氧化物、烟尘、空气综合污染当量对数、总…

小游戏分发平台如何以技术拓流?

2023年,小游戏的发展将受到多方面的影响,例如新技术的引入、参与小游戏的新玩家以及游戏市场的激烈竞争等。首先,新技术如虚拟现实(VR)、增强现实(AR)和机器人技术都可以带来新颖的游戏体验。其…

滑动窗口实例1(长度最小的子数组)

题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: …

VC++使用Microsoft Speech SDK进行文字TTS朗读

Microsoft Speech SDK下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=10121 需要msttss22L.exe、SpeechSDK51.exe、SpeechSDK51LangPack.exe三个,下载后全部安装 使用VS2005建立一个win32控制台项目 朗读"hello word"、中文“你好”的程序 …

百科有不需要的信息怎么删除?

百科词条的权威性众所周知,所以百度百科的内容审核也非常严格,百科营销成为目前网络营销工作中一个难点,很多企业无法得到自己完全满意的百度百科词条 ,这其实也是合理的。小马识途营销顾问分析,百科词条内容是提供给广…

10、【WebGIS实战】图层篇——通用服务图层加载全流程(适用于全部图层)

大家好,我是X北辰北。本文是「WebGIS实战」系列,关注这个标签,阅读所有文章,成为WebGIS开发高手。 图层可以理解为添加到地图上面的数据,比如我们要在地图上展示成都市所有大型公园的位置,那么当前地图中除了初始化地图时添加的底图之外,在底图的上面我们还叠加了一份关…

HuggingFace中的 Files and versions 如何优雅下载到本地?(Python requests,tqdm)

前言 在使用huggingface把玩各种大模型时,如果选择从远程加载模型,这个过程可能因为网络问题而非常耗时甚至直接失败,所以把模型、分词器等相关文件下载到本地,再直接从本地加载就成了不可回避的流程。 在进入具体版本的模型后&…

新版Mongodb(6.0以上)找不到mongo.exe

安装目录下/bin目录中,没有mongo.exe文件,只有mongod和mongos,以及一个powershell命令脚本。 原因在于,mongodb6.0以后做出了重大改变,mongodb已经不再默认为你安装shell工具,因此需要安装一个额外的shell…

二十二、迭代器模式

一、什么是迭代器模式 迭代器(Iterator)模式的定义:迭代器模式是一种对象行为型模式,它提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。   迭代器模式包含以下主要角色: 抽象聚合&…

字符串匹配的Rabin–Karp算法

leetcode-28 实现strStr() 更熟悉的字符串匹配算法可能是KMP算法, 但在Golang中,使用的是Rabin–Karp算法 一般中文译作 拉宾-卡普算法,由迈克尔拉宾与理查德卡普于1987年提出 “ 要在一段文本中找出单个模式串的一个匹配,此算法具有线性时间的平均复杂度&#xff0…

【XAMPP】启动数据库Error: MySQL shutdown unexpectedly.

问题: 启动MySQL时报错如下: Error: MySQL shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method. Press the Logs button to view error logs and check…

SQL-子查询

SQL 子查询 是指将一个SELECT查询(子查询)的结果用括号括起来作为另一个SQL语句的数据来源或者判断条件

RK3399平台开发系列讲解(入门篇)内核模块详细加载/卸载过程

🚀返回专栏总目录 文章目录 一、 ko文件的文件格式二、内核模块加载过程三、内核模块卸载过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍内核模块详细加载/卸载过程。 一、 ko文件的文件格式 “KO” 文件通常是指 Linux 内核模块文件,这些文件包含…

现货黄金走势图中的止盈点

对平仓时机的把握能力,是衡量现货黄金投资者水平的重要标志,止盈点设置得是否合理,在行情兑现的时候能否及时地离场,是事关投资者账户浮盈最终能否落袋为安的“头等大事”,要在现货黄金走势图中把握止盈点,…

【LeetCode-中等题】230. 二叉搜索树中第K小的元素

文章目录 题目方法一:层序遍历 集合排序方法二:中序遍历(栈 或者 递归 )方法三(方法二改进):中序遍历(栈 ) 题目 该题最大的特点就是这个树是二叉树: 所以…

自然语言处理(六):词的相似性和类比任务

词的相似性和类比任务 在前面的章节中,我们在一个小的数据集上训练了一个word2vec模型,并使用它为一个输入词寻找语义相似的词。实际上,在大型语料库上预先训练的词向量可以应用于下游的自然语言处理任务,为了直观地演示大型语料…