RPG7.准备GAS的工作

1.启动项目,为项目添加gameplayability插件

2.添加abilitysystemcomponent的c++类

3.添加attributeset的c++类

4.往build.cs内添加模块

5.进入CharacterBase内,添加gameplayasystem和attributbeset,覆写PossessedBy()和GetAbilitysystemcomponent()

class ARPG_GRIVITY_API ACharacterBase : public ACharacter, public IAbilitySystemInterface
{GENERATED_BODY()public:ACharacterBase();//创建能力组件的获取方法UXMBAbilitySystemComponent* GetXMBAbilitySystemComponent() const {return  XMBAbilitySystemComponent;}//创建属性集的获取方法UXMBAttributeSet* GetXMBAttributeSet() const {return  XMBAttributeSet;}//Begin IAbilitySystemInterface Interfacevirtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;//End IAbilitySystemInterface Interfaceprotected://创建能力组件UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "AbilitySystem")UXMBAbilitySystemComponent* XMBAbilitySystemComponent;//创建属性集UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "AbilitySystem")UXMBAttributeSet* XMBAttributeSet;//Begin Apawn Interfacevirtual void PossessedBy(AController* NewController) override;//End Apawn Interface
};

6.在构造函数里创建,覆写函数体内


#include "Character/CharacterBase.h"
#include "AbilitySystem/XMBAttributeSet.h"
#include "AbilitySystem/XMBAbilitySystemComponent.h"ACharacterBase::ACharacterBase()
{PrimaryActorTick.bCanEverTick = false;//初始禁用 Tick,适合需要手动控制更新的场景。PrimaryActorTick.bStartWithTickEnabled = false;//禁用贴花接收,适用于性能优化或特定视觉需求。GetMesh()->bReceivesDecals = false;XMBAbilitySystemComponent = CreateDefaultSubobject<UXMBAbilitySystemComponent>(TEXT("XMBAbilitySystemComponent"));XMBAttributeSet = CreateDefaultSubobject<UXMBAttributeSet>(TEXT("XMBAttributeSet"));
}UAbilitySystemComponent* ACharacterBase::GetAbilitySystemComponent() const
{return GetXMBAbilitySystemComponent();
}void ACharacterBase::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);if (XMBAbilitySystemComponent){XMBAbilitySystemComponent->InitAbilityActorInfo(this, this);}}

7.进入到玩家控制的角色内(XMBCharacter),对PossessedBy覆写

//Begin Apawn Interfacevirtual void PossessedBy(AController* NewController) override;//End Apawn Interface

void AXMBCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);if (XMBAbilitySystemComponent && XMBAttributeSet){GEngine->AddOnScreenDebugMessage(-1,5.f, FColor::Red, FString::Printf(TEXT("Owner: %s, Avatar : %s"),*XMBAbilitySystemComponent->GetOwnerActor()->GetActorLabel(),*XMBAbilitySystemComponent->GetAvatarActor()->GetActorLabel()));}
}

8.启动,能从日志里看到信息

9.我们需要给AbilitySystemComponent赋予Ability,当玩家尝试激活Ability时,实际上是从ASC中激活能力。对于激活的这一部分,我们可以自定义Ability的激活方式。

继续创建一个GameplayAbility的c++类,然后在其内创建一个激活策略的枚举,覆写两个函数

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Abilities/GameplayAbility.h"
#include "XMBGameplayAbility.generated.h"//创建一个激活能力的策略枚举
UENUM()
enum class EXMBAbilityActivationPolicy : uint8
{OnTriggered,OnGiven
};
/*** */
UCLASS()
class ARPG_GRIVITY_API UXMBGameplayAbility : public UGameplayAbility
{GENERATED_BODY()public:protected://设置激活策略UPROPERTY(EditDefaultsOnly, Category = "XMBAbility")EXMBAbilityActivationPolicy AbilityActivationPolicy = EXMBAbilityActivationPolicy::OnTriggered;//~ Begin UGameplayAbility Interfacevirtual void OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override;virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override;//~ End UGameplayAbility Interface};
// Fill out your copyright notice in the Description page of Project Settings.#include "AbilitySystem/Abilities/XMBGameplayAbility.h"#include "AbilitySystem/XMBAbilitySystemComponent.h"//在Ability被分配给AbilitySystemComponent后立即调用
void UXMBGameplayAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec)
{Super::OnGiveAbility(ActorInfo, Spec);if (AbilityActivationPolicy == EXMBAbilityActivationPolicy::OnGiven){if (ActorInfo && !Spec.IsActive()){//Spec.Handle是FGameplayAbilitySpec对象的句柄,表示一个具体的能力实例ActorInfo->AbilitySystemComponent->TryActivateAbility(Spec.Handle);}}
}void UXMBGameplayAbility::EndAbility(const FGameplayAbilitySpecHandle Handle,const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,bool bReplicateEndAbility, bool bWasCancelled)
{Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);if (AbilityActivationPolicy == EXMBAbilityActivationPolicy::OnGiven){if (ActorInfo){//Handle是FGameplayAbilitySpec对象的句柄,表示要清除的能力实例。ActorInfo->AbilitySystemComponent->ClearAbility(Handle);}}
}

10.启动引擎,右键即可创建一个刚才自己创建的gameplayability类,

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

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

相关文章

使用gitea发布软件包

1、新建hello工程 &#xff08;1&#xff09;HelloApplication.java package cn.ac.trimps.sv;import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplicati…

从请求到响应:初探spring web

引入&#xff1a; 首先小编想分享下一些开发小知识 2000年——手写servlet/JSP时代 在这个阶段中&#xff0c;那时候写后端代码&#xff0c;可谓是个麻烦事。 毕竟什么都要自己干 发来的请求都要写extends HttpServlet的类&#xff0c;手动在web.xml配置 <servlet>…

Redis从入门到实战实战篇2

面试重点&#xff1a;本篇包含悲观锁&#xff0c;乐观锁&#xff0c;多线程以及分布式锁的知识 目录 3.优惠卷秒杀 3.1 -全局唯一ID 3.2 -Redis实现全局唯一Id 3.3 添加优惠卷 3.4 实现秒杀下单 3.5 库存超卖问题分析 3.6 乐观锁解决超卖问题 3.7 优惠券秒杀-一人一单 …

LabVIEW实验室项目中使用类模块与仿真

在 LabVIEW 程序开发过程中&#xff0c;借鉴面向对象的类思想进行模块化架构设计&#xff0c;并结合仿真功能&#xff0c;能够高效应对不同场景的开发需求。 ​ 以实验室场景为例&#xff0c;LabVIEW 开发常面临设备种类繁多、调试周期漫长&#xff0c;且硬件难以一次性到位的情…

ES6入门---第二单元 模块三:对象新增、

一&#xff1a;对象简洁语法&#xff1a; 1、变量简洁 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函数简洁 let json {name, //name:name,age, //age:age/* showA:functi…

Python创意:AI图像生成——用代码绘制未来艺术

当代码邂逅艺术:AI图像生成的革命 在数字艺术领域,一场由Python和AI技术引领的革命正在悄然发生。无需专业绘画技巧,仅凭几行代码,普通人也能创造出令人惊叹的艺术作品。AI图像生成技术打破了艺术创作的门槛,让想象力成为唯一的限制。 核心技术方案 1. 技术架构 我们采…

一、Shell 脚本基础

一、Shell 简介 1.Shell 的定义与作用 Shell&#xff0c;通常被称为命令行解释器 (Command Line Interpreter)&#xff0c;是用户 &#x1f464; 与 Linux/Unix 操作系统内核进行交互 ↔️ 的“桥梁” &#x1f309;。它扮演着翻译官 &#x1f5e3;️ 的角色&#xff1a; 接…

青少年编程与数学 02-018 C++数据结构与算法 21课题、机器学习与人工智能算法

青少年编程与数学 02-018 C数据结构与算法 21课题、机器学习与人工智能算法 一、线性回归算法二、逻辑回归算法三、K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;四、决策树算法五、支持向量机&#xff08;SVM&#xff09;六、神经网络算法七、聚类算法八、降维算…

【数据结构】——单链表练习(1)

一、移除链表元素 题目链接&#xff1a; 移除链表元素 那么根据题目的要求我们大致明白这道题要做什么&#xff0c;就是将一个链表中&#xff0c;和指定的值相等的元素的节点删除&#xff0c;然后返回删除后的新的链表&#xff0c;然后题目给我们传入的参数是链表的头节点和指…

AI大模型基础设施:主流的几款开源AI大语言模型的本地部署成本

以下是对目前主流开源AI大语言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的详细分析&#xff0c;涵盖计算机硬件、显卡等成本&#xff0c;价格以美元计算。成本估算基于模型参数规模、硬件需求&#xff08;GPU、CPU、RAM、存储等&#xff09;以…

AI生成视频检测方法及其相关研究

目录标题 【1】AI-Generated Video Detection via Spatio-Temporal Anomaly Learning【2】DeCoF: Generated Video Detection via Frame Consistency【2.1】Spatiotemporal Convolutional Neural Networks (STCNN) rely on spatial artifacts【2.2】Capturing Universal Spatia…

仿腾讯会议——服务器注释

目录 1、修改协议 2、修改登录请求结构体 3、修改登录回复结构体 4、修改注册请求结构体 5、修改发送登录请求函数 6、实现发送注册请求函数 7、修改mysql存储数据格式 8、自己完成部分 1、修改协议 2、修改登录请求结构体 3、修改登录回复结构体 4、修改注册请求结构体…

list的迭代器详讲

1.list的迭代器就是封装了节点指针的类 2.迭代器失效 迭代器失效即迭代器封装的节点指针无效 。因为 list 的底层结构为带头结点的双向循环链表 &#xff0c;因此 在 list 中进行插入时是不会导致 list 的迭代 器失效的&#xff0c;只有在删除时才会失效&#xff0c;并且失效的…

deepSeek论文写作提示词指令大全(覆盖选题、写作、润色到投稿全流程)

一、选题与框架设计 1、跨学科选题突破 指令:"结合[领域A]与[领域B]的前沿理论,生成5个交叉创新性论文选题,要求每个选题包含可行性评估。"(支持跨学科研究创新) 示例:"在人工智能与教育心理学领域生成选题,分析理论适用性与资源获取难度。" 2、…

win11安装WSL(创建用户、更改或重置密码)

文章目录 win11安装WSL设置 Linux 用户名和密码更改或重置密码更新和升级软件包WSL 命令互操作性WSL 的基本命令安装列出可用的 Linux 发行版列出已安装的 Linux 发行版将 WSL 版本设置为 1 或 2设置默认 WSL 版本设置默认 Linux 发行版将目录更改为主页通过 PowerShell 或 CMD…

Vue.js 与 Ajax (vue-resource) 的深入解析

Vue.js 与 Ajax (vue-resource) 的深入解析 引言 在Web开发中,前后端的交互是不可或缺的。Ajax(异步JavaScript和XML)技术允许我们在不重新加载整个页面的情况下,与服务器交换数据和更新部分网页内容。Vue.js 作为一种流行的前端框架,提供了多种方式来处理Ajax请求。其中…

第十三章-PHP MySQL扩展

第十三章-PHP与MySQL 一&#xff0c;连接数据库 1. 使用 MySQLi&#xff08;面向对象方式&#xff09; <?php // 数据库参数 $host localhost; $username root; $password ; $database test_db;// 创建连接 $conn new mysqli($host, $username, $password, $databa…

【文献阅读】全球干旱地区植被突变的普遍性和驱动因素

一、研究背景 全球干旱区&#xff08;drylands&#xff09;覆盖了陆地面积的40%以上&#xff0c;承载了全球约三分之一人口&#xff0c;是生态系统脆弱性较高的区域。这些地区对气候变化和人类干扰尤其敏感。近年来&#xff0c;干旱区发生了大量植被突变现象&#xff0c;即生态…

【Vue3-Bug】中路由加载页面直接显示空白

Vue3中路由加载页面直接显示空白 没有子路由 路由定义不能重复&#xff0c;请自己查看数据在main.js(或者)mina.ts入口文件中&#xff0c;需要将router的注入到vue中的执行放在&#xff0c;vue挂在元素之前 // 顺序不能变 app.use(router) app.mount(#app)在App.vue中 // 在…

影楼精修-露齿笑算法解析

注意&#xff0c;为避免侵权&#xff0c;本文图片均为AIGC生成或网络公开数据&#xff1b; 像素蛋糕-露齿笑 在介绍本文之前&#xff0c;先说一下&#xff0c;其实露齿笑特效&#xff0c;并非像素蛋糕首创&#xff0c;早在几年前&#xff0c;face app就率先推出了这个效果&am…