7. UE5 RPG修改GAS的Attribute的值

这篇具有很好参考价值的文章主要介绍了7. UE5 RPG修改GAS的Attribute的值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

实现拾取药瓶回血功能

7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
首先创建一个继承于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,然后设置数值增长。
7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
接下来在UE里面创建一个蓝图,基于EffectActorBase。
7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
左侧会发现我们在代码中添加的Mesh和Sphere。
7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
添加模型网格体,然后调整球的大小。
7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
运行场景,输入showdebug abilitysystem
7. UE5 RPG修改GAS的Attribute的值,unreal,UE5 RPG,ue5,游戏
如果值修改,那证明功能实现。

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文章来源地址https://www.toymoban.com/news/detail-800311.html

// 版权归暮志未晚所有。


#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);
}



到了这里,关于7. UE5 RPG修改GAS的Attribute的值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (UE4/UE5)Unreal Engine中使用HLOD

    本教程将详细介绍在Unreal Engine的不同版本(4.20-4.24、4.25-4.26、5.2)中如何使用Hierarchical Level of Detail (HLOD)。注意,每个版本中使用HLOD的方法可能会有所不同。 步骤一:预先生成LOD打开UE4.21,点击Content Browser(内容浏览器)中你想要生成LOD的静态网格。 步骤二:在静态网格编

    2024年02月10日
    浏览(51)
  • 14. UE5 RPG使用曲线表格设置回复血量值

    之前的文章中,我使用的都是固定的数值来设置血量回复或者蓝量回复,在这篇文章里面,介绍一下使用曲线表格。通过曲线表格我们可以设置多个数值,然后通过去通过修改索引对应的数值去修改回复的血量或者蓝量。 首先创建一个曲线表格,在其它里面找到 然后可以根

    2024年02月21日
    浏览(40)
  • Unreal Engine(UE5)中构建离线地图服务

    1.     首先需要用到3个软件,Unreal Engine,gis office 和 bigemap离线服务器 Unreal Engine下载地址:点击前往下载页面 Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unreal Engine用于数字孪生项目开发,gis office是一款地理信息软件,可用于获取

    2024年01月18日
    浏览(47)
  • 【UE5 Cesium】15-Cesium for Unreal 加载本地影像和地形

    目录 一、加载全球无高度地形 二、加载区域DEM 三、加载离线地图影像 1. 先去如下网址下载全球无高度地形:Using a global terrain layer without height detail - #9 by RidhwanAziz - Cesium for Unreal - Cesium Community 下载后如下: 解压后可以看到是一个.tif格式的文件 2. 打开CesiumLab,需要将tif转为

    2024年02月07日
    浏览(43)
  • 【UE5 Cesium】11-Cesium for Unreal 切换Dynamic Pawn为其它Pawn

            我们知道在Cesium for Unreal中默认使用的是DynamicPawn来浏览地图场景。DynamicPawn适用全球浏览,可以按自定义曲线进行飞行。但是DynamicPawn是使用的是地理参考坐标系,并不是标准的UE坐标系,当我们全球浏览结束后,可能需要在某一个地方进行浏览,可能就需要涉及

    2024年02月12日
    浏览(44)
  • 【UE5 Cesium】14-Cesium for Unreal 加载服务器上的倾斜摄影

    目录 前言  步骤 一、下载安装tomcat 10 二、下载安装JDK 三、启动Tomcat 四、Tomcat加载倾斜摄影 五、UE中加载Tomcat上的倾斜摄影         上一篇文章(【UE5 Cesium】13-Cesium for Unreal 加载本地倾斜摄影)介绍了如何在UE中加载本地倾斜摄影,本文在该文章基础上继续介绍如何在将

    2024年02月12日
    浏览(50)
  • UE5 将类修改目录

    有个需求,需要修改ue里面类的位置,默认在Public类下面,我想创建一个二级目录,将所有的类分好位置,方便查看。 上图为创建一个类所在的默认位置。 接下来,将其移动到一个新的目录中。 首先在资源管理器中找到资源的存放目录,在Source/项目名 下面。 我想将类移动

    2024年01月19日
    浏览(35)
  • UE4/UE5引擎 FPS游戏逆向工程

    课程详细目录 : UE引擎逆向 入门到精通 联系方式 :点击课程详细目录查看 简介: 🔥 本课程全部采用C++编程 🔓 对抗加解密逆向过程:我们将深入探讨如何对抗游戏的加密与解密机制 🕵️ 功能的寻找与实现:学完课程后,您将能够迅速定位并实现游戏内各种功能 学完本

    2024年02月02日
    浏览(44)
  • 【UE5 多人联机教程】04-加入游戏

    1. 新建一个控件蓝图,父类为“USC_Button_Standard”  控件蓝图命名为“UMG_Item_Room”,用于表示每一个搜索到的房间的界面 打开“UMG_Item_Room”,在图表中新建一个变量,命名为“Session”  变量类型为“蓝图会话结果”,选择可编辑实例和生成时公开 2. 打开“UMG_MainMenu”,添加

    2024年02月15日
    浏览(64)
  • UE5.1.1 C++从0开始(18.游戏标签)

    教程的链接:https://www.bilibili.com/video/BV1nU4y1X7iQ 这一章刚开始听可能有点晕,就记得最后做的几个功能其它全忘记了,我在这里做一个总结: 我们并没有从头开始像构建GAS一样构建一个游戏标签,我们使用的是官方给的数据类型,我们在代码内初始化的是标签容器,我们在容

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包