UE4 GAS 04 -伤害设置

这篇博客介绍了如何利用Unreal Engine 4的Gameplay Ability System (GAS)创建一个基础的战斗系统。内容包括:1) 接收并处理敌人造成的伤害;2) 在Gameplay Ability中响应Damage事件并施加视觉效果;3) 创建GameplayEffect类定义击中效果;4) 使用C++和蓝图实现血量UI更新及生命值限制。通过这些步骤,初学者可以构建一个简单的游戏逻辑组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学GAS,仅用作自己查缺补漏,不想再做时又去找视频
参考教程:
英文原版(联机):Ambience Lee:
https://www.udemy.com/course/introduction-to-unreal-engine-4-ability-system/
中文翻译重置(单机):小明:
https://space.bilibili.com/149146076/channel/detail?cid=127939&ctype=0

一、碰到敌人时给自己推送伤害消息,Target为敌人

在这里插入图片描述

二、在GA中等待发送过来的Damage事件并对击中者设置效果,当动画播放完成或取消后停止StopAbility

在这里插入图片描述
在这里插入图片描述

三、设置击中效果GameplayEffect类

在这里插入图片描述

四、通过绑定变量变化反射来更新血量

4.1、自己创建血量UI并设置更新函数

4.2、c++中override PostGameplayEffectExecute函数进行属性改变检测,顺便进行生命值限制

AttributeSetBase.h

	DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnHealthChanged, float, CurHealth, float, MaxHealth);
	UPROPERTY(BlueprintAssignable)
		FOnHealthChanged OnHealthChanged;

	void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;

AttributeSetBase.cpp


#include "AttributeSetBase.h"
#include "GameplayEffectExtension.h"
#include "GameplayEffect.h"

UAttributeSetBase::UAttributeSetBase()
	:MaxHealth(100.f),Health(MaxHealth)
{
}

void UAttributeSetBase::PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data)
{
	if (Data.EvaluatedData.Attribute.GetUProperty() == FindFieldChecked<FProperty>(UAttributeSetBase::StaticClass(), GET_MEMBER_NAME_CHECKED(UAttributeSetBase, Health)))
	{

		//生命值限制
		Health.SetCurrentValue(FMath::Clamp(Health.GetCurrentValue(), 0.f, MaxHealth.GetCurrentValue()));
		//生命值变化广播
		OnHealthChanged.Broadcast( Health.GetCurrentValue(),MaxHealth.GetCurrentValue());
		//打印生命值到Log
		UE_LOG(LogTemp, Warning, TEXT("Health is %f"), Health.GetCurrentValue());
	}
}

4.3、蓝图中自行绑定函数、加了死亡逻辑

在这里插入图片描述
这样一个具有简单逻辑的GAS项目就起来了

### 关于 Unreal Engine 中 GAS 和 Aura 的介绍 在 Unreal Engine 中,Gameplay Ability System (GAS) 是一套用于创建复杂游戏机制的强大工具集。这套系统允许开发者通过定义能力、效果和其他属性来构建游戏角色的行为模式[^2]。 #### Gameplay Ability System 基础概念 - **Abilities(能力)**: 定义角色能够执行的动作,比如攻击、跳跃等。 - **Attributes(属性)**: 描述角色的状态数据,如生命值、魔法值等。 - **Effects(效果)**: 当某个事件发生时应用给目标对象的变化,例如伤害计算或状态附加。 对于希望深入了解如何利用 GAS 构建游戏逻辑的人来说,《Aura》是一个非常受欢迎的教学案例。它不仅展示了如何实现基本的游戏玩法功能,还提供了关于动画图表中的旋转乘数骨骼控制器节点新增加法标志位的具体应用场景实例[^1]。 #### 使用 C++ 或者蓝图实现自定义行为 无论是采用C++还是蓝图脚本语言,在《Aura》教程里都能找到相应的指导文档和支持材料。这使得不同编程背景下的团队成员都能够参与到项目的开发过程中去,并且整个架构设计考虑到了多人协作的需求,支持从小型到大型规模的工作室使用。 ```cpp // 示例:定义一个新的 GamePlayAbility 类 #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyCustomAbility.generated.h" UCLASS() class MYGAME_API UMyCustomAbility : public UGameplayAbility { GENERATED_BODY() protected: virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) override; }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值