29. UE5 RPG应用GamplayAbility
前面几篇文章,总算把GE给更新完了,GE的基础应用也算讲清楚了。接下来,我们将更新GA的相应的课程了,首先,这一篇先对GA做一个简单的介绍,然后实现一下如何实现给角色应用一个GA。
简介
GamplayAbility 简称 GA,是UE引擎里的GAS内的功能组件,它的主要功能包括技能冷却时间(CD)和技能消耗的管理,同时也支持网络同步和实例支持。开发者可以在ActivateAbility事件中编写相关的技能逻辑,如角色动作、粒子效果以及角色数值的变动。根据技能是否施展成功,可以调用CommitAbility()或EndAbility()来结束技能。
GameplayAbility在UE中的类名为UGameplayAbility,它继承于UObject和IGameplayTaskOwnerInterface。UObject是所有UE对象的基类,而IGameplayTaskOwnerInterface是一个抽象类,代表玩法任务所有者接口。UGameplayAbility通过其丰富的继承关系和函数,使得开发者能够灵活地创建和管理游戏中的技能系统。
GA类主要定义攻击或者能力,它必须首先被应用给ASC,我们将在服务器上执行此操作,然后将 GA的spec复制到本地。在使用时,必须将其激活(Activated,如果只应用,不激活,将不起效果),它可以异步运行,就是可以同时触发多个技能,正常技能它是不能够异步的,我们需要使用Ability Task去实现技能异步。
创建GA
GA的配置修改是需要在蓝图中进行的,我们可以直接通过创建蓝图选择GameplayAbility去创建
但是考虑到后续要为GA增加新的功能,我们先通过GameplayAbility创建一个c++类,然后将其命名为GameplayAbilityBase,当做技能的基类,用于以后的扩展。
打开代码,我们首先找到ASC的基类,在基类增加一个函数,用于应用技能,参数传入一个技能类的数组
void AddCharacterAbilities(const TArray<TSubclassOf<UGameplayAbility>>& StartupAbilities);
在函数实现这里,遍历传入的数组,通过参数实例一个spec,并应用,这里为了方便测试,使用GiveAbilityAndActivateOnce函数应用,并直接激活。
void UAbilitySystemComponentBase::AddCharacterAbilities(const TArray<TSubclassOf<UGameplayAbility>>& StartupAbilities)
{for(TSubclassOf<UGameplayAbility> AbilityClass : StartupAbilities){FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, 1);//GiveAbility(AbilitySpec); //只应用不激活GiveAbilityAndActivateOnce(AbilitySpec); //应用技能并激活一次}
}
找到角色的基础类CharacterBase,添加一个私有属性,作为角色初始的技能设置。
private:UPROPERTY(EditAnywhere, Category="Attributes")TArray<TSubclassOf<UGameplayAbility>> StartupAbilities; //角色初始技能设置
在函数实现这里,将ASC类型转换为我们创建的ASC基类,并调用上面添加技能的函数
void ACharacterBase::AddCharacterAbilities() const
{UAbilitySystemComponentBase* ASC = CastChecked<UAbilitySystemComponentBase>(GetAbilitySystemComponent());if(!HasAuthority()) return; //查询是否拥有网络权限,应用技能需要添加给服务器ASC->AddCharacterAbilities(StartupAbilities);
}
这里,技能的设置,技能的应用函数就已经实现完毕,我们现在只需要在初始化角色的时候调用角色基类身上的AddCharacterAbilities函数,即可实现技能的应用。
在英雄角色类里面,服务器端初始化函数为PossessedBy,我们在内部初始化ASC后,调用初始化技能即可。
void AHeroCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);//初始化ASC的OwnerActor和AvatarActorInitAbilityActorInfo();//设置OwnerActor的ControllerSetOwner(NewController);//初始化角色技能AddCharacterAbilities();
}
测试
功能实现了,接下来,我们要实现对功能的测试,首先打开UE,创建一个技能蓝图,基于我们之前创建的技能类
内部默认有两个函数回调,一个是技能被激活后的回调,我们可以在后面计算消耗,播放动画,以及做一些逻辑性的处理
另一个回调事件是技能结束回调,可以在技能结束时需要编辑一些逻辑处理
技能的结束需要我们手动去处理,在内部调用,是用commitAbility节点(计算技能消耗是否达标,不达标自动结束技能)EndAbility节点(结束技能)或者在外部取消技能
一下是我们实现的一个技能测试蓝图,延迟一秒结束技能,看是否正常打印
打开英雄角色蓝图,发现自定义属性这里多了一项设置技能的数组参数,将我们创建的技能蓝图设置上去
接着运行,看是否正常打印,如果正常打印,那证明技能使用测试通过。
相关文章:

29. UE5 RPG应用GamplayAbility
前面几篇文章,总算把GE给更新完了,GE的基础应用也算讲清楚了。接下来,我们将更新GA的相应的课程了,首先,这一篇先对GA做一个简单的介绍,然后实现一下如何实现给角色应用一个GA。 简介 GamplayAbility 简称…...
http和https的区别!
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSLHTTP) 数据传输过程是加密的,安全性较好。 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) …...

使用AOP实现打印日志
首先创建annotation.SystemLog类: package com.gjh.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD…...

2024年新算法-冠豪猪优化算法(CPO),CPO-RF-Adaboost,CPO优化随机森林RF-Adaboost回归预测-附代码
冠豪猪优化算法(CPO)是一种基于自然界中猪群觅食行为启发的优化算法。该算法模拟了猪群在寻找食物时的集群行为,通过一系列的迭代过程来优化目标函数,以寻找最优解。在这个算法中,猪被分为几个群体,每个群体…...

浅谈高阶智能驾驶-NOA领航辅助的技术与发展
浅谈高阶智能驾驶-NOA领航辅助的技术与发展 附赠自动驾驶学习资料和量产经验:链接 2019年在国内首次试驾特斯拉NOA领航辅助驾驶的时候,当时兴奋的觉得未来已来;2020年在试驾蔚来NOP领航辅助驾驶的时候,顿时不敢小看国内新势力了;现在如果哪家…...

大模型 智能体 智能玩具 智能音箱 构建教程 wukong-robot
视频演示 10:27 一、背景 继上文《ChatGPT+小爱音响能擦出什么火花?》可以看出大伙对AI+硬件的结合十分感兴趣,但上文是针对市场智能音响的AI植入,底层是通过轮询拦截,算是hack兼容,虽然官方有提供开发者接口,也免不了有许多局限性(比如得通过特定指令唤醒),不利于我…...

Clickhouse-表引擎探索之MergeTree
引言 前文曾说过,Clickhouse是一个强大的数据库Clickhouse-一个潜力无限的大数据分析数据库系统 其中一个强大的点就在于支持各类表引擎以用于不同的业务场景。 MergeTree MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一…...

网络电视盒子哪个好?小编分享电视盒子品牌排行榜
电视盒子使用频率高,功能丰富,价格划算,是我们日常不可或缺的部分,小编经常会被问到与电视盒子相关的问题,考虑到很多朋友并不了解网络电视盒子哪个好,这次我来分享业内权威电视盒子品牌排行榜,…...
开源模型应用落地-baichuan2模型小试-入门篇(三)
一、前言 相信您已经学会了如何在Windows环境下以最低成本、无需GPU的情况下运行baichuan2大模型。现在,让我们进一步探索如何在Linux环境下,并且拥有GPU的情况下运行baichuan2大模型,以提升性能和效率。 二、术语 2.1. CentOS CentOS是一种基于Linux的自由开源操作…...

景联文科技高质量大模型训练数据汇总!
3月25日,2024年中国发展高层论坛年会上,国家数据局局长刘烈宏在“释放数据要素价值,助力可持续发展”的演讲中表示,中国10亿参数规模以上的大模型数量已超100个。 当前,国内AI大模型发展仍面临诸多困境。其中ÿ…...
【python】正则表达式
文章目录 正则表达式对象re.RegexObjectre.MatchObject符号说明匹配基础匹配?=、?<=、?!、?<!字符类re模块编译正则表达式compile 函数匹配字符串re.matchre.searchre.findall...

学习vue3第十二节(组件的使用与类型)
1、组件的作用用途 目的: 提高代码的复用度,和便于维护,通过封装将复杂的功能代码拆分为更小的模块,方便管理, 当我们需要实现相同的功能时,我们只需要复用已经封装好的组件,而不需要重新编写相…...

flume配置文件后不能跟注释!!
先总结:Flume配置文件后面,不能跟注释,可以单起一行写注释 报错代码: [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…...

【docker】Dockerfile自定义镜像
📝个人主页:五敷有你 🔥系列专栏:中间件 ⛺️稳中求进,晒太阳 1.Dockerfile自定义镜像 常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就…...

webpack项目打包console git分支、打包时间等信息 exec
相关链接 MDN toLocaleString child_process Node.js strftime 格式 代码 buildinfo.js const { execSync, exec } require("child_process"); // exec: 在 Windows 执行 bat 和 cmd 脚本// execSync 同步 // exec 异步// exec 使用方法 // exec(git show -s,…...
Linux centos7离线搭建FTP
1、下载、安装ftp 下载ftp安装包,可以从rpm下载站搜索合适的版本,使用wget命令下载。 wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm 安装: rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm 2…...
关于GPT-SoVITS语音合成的效果展示(西游之西天送葬团)
目录 使用效果总结合成效果展示 使用效果总结 使用的是2024年03月21日22点28分更新的版本。 使用起来很方便,从它“自带界面”这点就能看出,易于使用也是目的之一,而且从训练到推理的每个步骤都能在界面中完成。 集成了多个实用工具&#…...
如何安装OceanBase的OBD
选择一:借助 all-in-one 安装包安装 OBD(推荐) OceanBase 社区版的all-in-one安装包是一个集成了多种工具的一键式安装包。它包含了数据库软件本身,以及OBD、OBProxy、OBClient,自4.1版本起,还额外加入了O…...
Unity 读写Excel打包后无法运行可能的解决方案
读写Excel打包后无法运行可能的解决方案 💡.适用于NPOI、EPPlus。 💡.下载 资源包👈,解压后把dll放到Assets目录中再重新打包即可。...

算法沉淀 —— 深度搜索(dfs)
算法沉淀 —— 深度搜索(dfs) 一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证二叉搜索树五、二叉搜索树中第K小的元素 一、计算布尔二叉树的值 【题目链接】:2331. 计算布尔二叉树的值 【题目】: …...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...