7. UE5 RPG修改GAS的Attribute的值

前面几节文章介绍了如何在角色身上添加AbilitySystemComponent和AttributeSet。并且还实现了给AttributeSet添加自定义属性。接下来,实现一下如何去修改角色身上的Attribute的值。

实现拾取药瓶回血功能

在这里插入图片描述
首先创建一个继承于Actor的c++类,actor是可以放置到场景中的基类。

	UPROPERTY(VisibleAnywhere)TObjectPtr<UStaticMeshComponent> Mesh;

创建一个静态模型组件,用来显示当前可拾取物的模型。

	UPROPERTY(VisibleAnywhere)TObjectPtr<USphereComponent> Sphere;

创建一个碰撞体球,用于检测和主角的碰撞来触发回调。

	Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");SetRootComponent(Mesh);Sphere = CreateDefaultSubobject<USphereComponent>("Sphere");Sphere->SetupAttachment(GetRootComponent());

然后初始化中,创建对象,并将Mesh设置为根节点,并将球碰撞体挂在Mesh下面。

UFUNCTION()
virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);UFUNCTION()
virtual void EndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

创建两个回调,用于碰撞触发的开始和结束。

	Sphere->OnComponentBeginOverlap.AddDynamic(this, &AEffectActorBase::OnOverlap);Sphere->OnComponentEndOverlap.AddDynamic(this, &AEffectActorBase::EndOverlap);

绑定到球体碰撞事件上,如果球体触发了碰撞,则会调用这两个函数。

void AEffectActorBase::OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{//TODO: 为了测试数值修改功能,启用了常量转变量功能。if(IAbilitySystemInterface* ASCInterface = Cast<IAbilitySystemInterface>(OtherActor)){//根据类从ASC里面获取到对应的AS实例const UAttributeSetBase* AttributeSet = Cast<UAttributeSetBase>(ASCInterface->GetAbilitySystemComponent()->GetAttributeSet(UAttributeSetBase::StaticClass()));UAttributeSetBase* MutableAttributeSet = const_cast<UAttributeSetBase*>(AttributeSet); //将常量转为变量MutableAttributeSet->SetHealth(AttributeSet->GetHealth() + 25.f);Destroy(); // 销毁自身}
}

接着在碰撞触发的时候,从接口获取到AttributeSet,然后设置数值增长。
在这里插入图片描述
接下来在UE里面创建一个蓝图,基于EffectActorBase。
在这里插入图片描述
左侧会发现我们在代码中添加的Mesh和Sphere。
在这里插入图片描述
添加模型网格体,然后调整球的大小。
在这里插入图片描述
运行场景,输入showdebug abilitysystem
在这里插入图片描述
如果值修改,那证明功能实现。

EffectActorBase.h

// 版权归暮志未晚所有。#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "EffectActorBase.generated.h"class USphereComponent;
class UStaticMeshComponent;UCLASS()
class AURA_API AEffectActorBase : public AActor
{GENERATED_BODY()public:	AEffectActorBase();UFUNCTION()virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);UFUNCTION()virtual void EndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);protected:// 游戏开始或生成对象时回调virtual void BeginPlay() override;private:UPROPERTY(VisibleAnywhere)TObjectPtr<USphereComponent> Sphere;UPROPERTY(VisibleAnywhere)TObjectPtr<UStaticMeshComponent> Mesh;
};

EffectActorBase.app

// 版权归暮志未晚所有。#include "Actor/EffectActorBase.h"#include "AbilitySystemComponent.h"
#include "AbilitySystemInterface.h"
#include "AbilitySystem/AttributeSetBase.h"
#include "Components/SphereComponent.h"AEffectActorBase::AEffectActorBase()
{// 设置当前对象是否每帧调用Tick()PrimaryActorTick.bCanEverTick = false;Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");SetRootComponent(Mesh);Sphere = CreateDefaultSubobject<USphereComponent>("Sphere");Sphere->SetupAttachment(GetRootComponent());
}void AEffectActorBase::OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{//TODO: 为了测试数值修改功能,启用了常量转变量功能。if(IAbilitySystemInterface* ASCInterface = Cast<IAbilitySystemInterface>(OtherActor)){//根据类从ASC里面获取到对应的AS实例const UAttributeSetBase* AttributeSet = Cast<UAttributeSetBase>(ASCInterface->GetAbilitySystemComponent()->GetAttributeSet(UAttributeSetBase::StaticClass()));UAttributeSetBase* MutableAttributeSet = const_cast<UAttributeSetBase*>(AttributeSet); //将常量转为变量MutableAttributeSet->SetHealth(AttributeSet->GetHealth() + 25.f);Destroy(); // 销毁自身}
}void AEffectActorBase::EndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
{
}void AEffectActorBase::BeginPlay()
{Super::BeginPlay();Sphere->OnComponentBeginOverlap.AddDynamic(this, &AEffectActorBase::OnOverlap);Sphere->OnComponentEndOverlap.AddDynamic(this, &AEffectActorBase::EndOverlap);
}

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

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

相关文章

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例&#xff1a;https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫&#xff0c;爬取页面图片 项目介绍 开发工具&#xff1a;IDEA2023.2.5 JDK&#xff1a;Java17 SpringBoot&#xff1a;3.2.x 通过 SpringBoot 快速构建开发环境…

C# 线程间操作无效: 从不是创建控件的线程访问它--多线程操作

我们在用线程操作的时候&#xff0c;可能会出现异常&#xff1a;线程间操作无效: 从不是创建控件richTextBox1的线程访问它。因为windows窗体控件不是线程安全的&#xff0c;如果几个线程操作某一控件的状态&#xff0c;可能会使该控件的状态不一致&#xff0c;出现争用或死锁状…

一键信息收集工具 -- ENScan_GO

免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删除。…

基于Java+SSM+MYSQL的助农特色农产品销售系统详细设计和实现【附源码】

基于JavaSSM助农特色农产品销售系统详细设计和实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定…

Spring Boot 配置文件和日志

目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombo…

第二百七十三回

文章目录 1. 概念介绍2. 方法与信息2.1 获取方法2.2 详细信息 3. 示例代码4. 内容总结 我们在上一章回中介绍了"蓝牙综合示例"相关的内容&#xff0c;本章回中将介绍如何获取设备信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中获…

交互设计:降低用户负荷

之前给大家介绍了交互设计的底层模型——最新版福格行为模型。 模型告诉我们想让用户进行某个行为有3个步骤&#xff0c;第一个步骤是检查有没有(合理的)行为提示&#xff0c;我把它翻译成能否吸引用户注意&#xff0c;感兴趣的同学可以查看《交互设计之吸引用户注意》。第二个…

极简云源码已经开源

源码介绍 极简云已经开源 解绑卡密 查询卡密 总体来说还是很完善的 对接例子网盘里有 用户注册需要配置邮箱 上网页QQ邮箱标准版开启SMTP 然后生成授权码 后台发信邮箱里填就对了 实在不会配置邮箱的 可以下载网盘里的reg.php 把reg.php上传源码里的user目录 之后注册就不需要…

大模型基础2

大模型基础2 第二章&#xff1a;大模型的能力 语言模型的适应性&#xff1a;从语言模型到任务模型的转化 语言模型转化为任务模型的过程称为"适应"&#xff1a; 任务的自然语言描述一组训练实例&#xff08;输入-输出对&#xff09; 进行适应的两个种方法&#xf…

中国联通助力吴江元荡生态岸线打造5G+自动驾驶生态长廊

吴江&#xff0c;素有“鱼米之乡”“丝绸之府”的美誉&#xff0c;其地理位置优越&#xff0c;地处太湖之滨。近年来&#xff0c;随着长三角生态绿色一体化发展示范区&#xff08;以下简称“示范区”&#xff09;的建立&#xff0c;元荡更是声名大噪&#xff0c;成为众多游客心…

鸿蒙OS4.0兼容性测试

背景 OpenHarmony兼容性测评主要是验证合作伙伴的设备和业务应用满足OpenHarmony开源兼容性定义的技术要求&#xff0c;确保运行在OpenHarmony上的设备和业务应用能稳定、正常运行&#xff0c;同时使用OpenHarmony的设备和业务应用有一致性的接口和业务体验。 OpenHarmony兼容…

Vulnhub靶机:driftingblues 2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;driftingblues2&#xff08;10.0.2.18&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entr…