Gameplay Ability System(普通攻击能力)

一、创建所有能力的基类TestBaseGameplayAbility
1、在UE里新建C++,路径填写新的文件夹名来在C++Classes目录下同时创建新的文件夹
在这里插入图片描述
2、注意,创建完成后可能会报错,是因为CPP文件里引用的路径名错了,删除新建文件夹名即可在这里插入图片描述
在这里插入图片描述
3、把学习能力那一篇里的AquireAblility函数参数类型改成新的基类
TestCharacter.h:

#include "项目名/Gameplay/TestBaseGameplayAbility.h"

void AquireAbility(TSubclassOf<
### Gameplay Ability System Component 使用指南 #### 初始化与配置 在虚幻引擎中使用 `AbilitySystemComponent`(ASC),首先需要将其添加到角色类中。可以通过继承 `AbilitySystemInterface` 接口,并实现 `GetAbilitySystemComponent()` 方法来完成。在蓝图或C++代码中,还需要显式地将 `AbilitySystemComponent` 添加到角色组件树中,并确保其在 `BeginPlay` 期间正确初始化。 此外,为了支持属性系统,需要创建一个自定义的 `AttributeSet` 类,该类继承自 `AttributeSet` 基类,并定义角色所需的属性(例如生命值、移动速度等)。这些属性需要注册到 `AttributeSet` 中,并通过 `AbilitySystemComponent` 与角色关联[^4]。 #### 属性管理 `AttributeSet` 是用于存储游戏属性的数据结构,例如健康值、能量值等。每个 `AttributeSet` 实例绑定到 `AbilitySystemComponent` 上,并且可以通过 `GameplayEffect` 来修改属性值。这些效果可以是永久性的,也可以是临时的,例如增益(BUFF)或减益(DEBUFF)效果。 在实际应用中,可以通过调用 `ApplyGameplayEffectToSelf()` 或其他相关函数来应用 `GameplayEffect` 到 `AbilitySystemComponent`,从而影响绑定的 `AttributeSet` 中的属性值。这种机制使得开发者能够以模块化的方式处理复杂的属性变化逻辑[^2]。 #### 技能执行 `GameplayAbility` 是 `AbilitySystemComponent` 的核心部分之一,它表示角色可以执行的动作,例如攻击、跳跃或施法。每种能力都可以被授予(Granted)给角色,并在特定条件下激活。技能通常绑定到输入事件上,例如按键触发。 在实现过程中,可以通过重写 `K2_ActivateAbility()` 函数来自定义技能的激活逻辑。同时,还可以利用 `AbilityTask` 来管理异步操作,例如等待动画播放完毕或者追踪目标位置。这些任务允许开发者构建复杂的行为逻辑,而不会阻塞主线程[^3]。 #### 网络同步与预测 对于多人游戏场景,`AbilitySystemComponent` 提供了网络同步的支持,确保客户端和服务器之间的状态一致性。通过启用预测(Prediction),可以在客户端提前模拟技能效果,减少玩家感受到的延迟。这一特性依赖于 `GameplayTag` 和 `GameplayEffect` 的精确设计,以确保在网络环境下行为的一致性。 #### 目标定位与特效 当技能需要作用于特定目标时,可以利用 `Targeting` 系统来确定目标对象。这通常涉及到射线检测(Line Trace)或碰撞检测(Collision Detection)技术,具体实现可以根据项目需求进行调整。 与此同时,`GameplayCue` 被用来处理视觉或音效反馈,例如爆炸效果或声音提示。这些提示可以通过 `AbilitySystemComponent` 自动分发给所有相关的客户端,确保跨平台的一致体验。 #### 示例代码 以下是一个简单的示例,展示如何在C++中初始化 `AbilitySystemComponent` 并注册 `AttributeSet`: ```cpp // MyCharacter.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "AbilitySystemInterface.h" #include "MyCharacter.generated.h" UCLASS() class MYPROJECT_API AMyCharacter : public ACharacter, public IAbilitySystemInterface { GENERATED_BODY() public: // IAbilitySystemInterface virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; protected: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components") UAbilitySystemComponent* AbilitySystemComp; UPROPERTY(EditDefaultsOnly, Category = "Attributes") TSubclassOf<UAttributeSet> AttributeSetClass; }; // MyCharacter.cpp #include "MyCharacter.h" #include "AbilitySystemComponent.h" #include "AttributeSet.h" AMyCharacter::AMyCharacter() { // 创建 AbilitySystemComponent AbilitySystemComp = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("AbilitySystemComp")); AbilitySystemComp->SetIsReplicated(true); // 设置 AttributeSet AttributeSetClass = UMyAttributeSet::StaticClass(); } UAbilitySystemComponent* AMyCharacter::GetAbilitySystemComponent() const { return AbilitySystemComp; } ``` 上述代码展示了如何在角色类中初始化 `AbilitySystemComponent` 并设置 `AttributeSet`。进一步的工作包括加载和应用 `GameplayEffect`,以及绑定具体的 `GameplayAbility` 实例到输入事件上。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值