GameplayAbility [Attributes]——[数据属性]

    与游戏能力交互的玩家通常需要一组数据属性,系统可以访问和修改这些属性来影响游戏逻辑并跟踪游戏发生的事情。我们把它称之为 GameplayAttributes或者Attributes,这些数据是由Gameplay Effects修改的,可能是永久性修改也可能是暂时性的。

    那我们可以理解为Attributes实际上是一个数据属性集,里面有很多关于游戏的属性或者玩家的,例如玩家的生命,体力,移动速度等等,那么这些数据被修改的源头是GameplayEffects。

    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    UCLASS(DefaultToInstanced, Blueprintable)
    class GAMEPLAYABILITIES_API UAttributeSet : public UObject
    {
        GENERATED_UCLASS_BODY()

    public:
    //AttributeSet是否能通过他的路径名来引用
        bool IsNameStableForNetworking() const override;

    //该数据集引用默认支持网络传输
        bool IsSupportedForNetworking() const override
        {
            return true;
        }

    //可以理解为Effect调用影响该数据集之前
    virtual bool PreGameplayEffectExecute(struct FGameplayEffectModCallbackData &Data) { return true; }

    //Effect执行后,告知Attribute需要修改了哪些属性,这里可以判断Effect修改该数据集的哪些属性,例如,血量或者体力,然后加入一些自己的游戏逻辑,例如血量为0时死亡。
    virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData &Data) { }

    /该数据集修改时,这里可以判断修改哪个属性,以及修改成什么值,这里实际上是做一个二次校验,例如生命值最大100,被修改成1000时,这里可以做过滤操作
    virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) { }

    //该数据集的某个属性最后确认修改前调用,这里不适合做游戏相关的逻辑
    virtual void PreAttributeBaseChange(const FGameplayAttribute& Attribute, float& NewValue) const { }

    //初始化改数据集对应的元数据表
    void InitFromMetaDataTable(const UDataTable* DataTable);
    }

    看执行顺序如下:

    clipboard

    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //整个数据结构是Effect作用到Attribute时的回调数据。
    struct FGameplayEffectModCallbackData
    {
        FGameplayEffectModCallbackData(const FGameplayEffectSpec& InEffectSpec, FGameplayModifierEvaluatedData& InEvaluatedData, UAbilitySystemComponent& InTarget)
            : EffectSpec(InEffectSpec)
            , EvaluatedData(InEvaluatedData)
            , Target(InTarget)
        {

        }

    //这里是关于发起激活的Effect的数据
        const struct FGameplayEffectSpec&       EffectSpec;     // The spec that the mod came from
    //这个是作用于Target的数据,关于Buff对目标的数据
        struct FGameplayModifierEvaluatedData&  EvaluatedData;  // The 'flat'/computed data to be applied to the target
    //buff受体(被作用的目标)的能力组件
        class UAbilitySystemComponent &Target;      // Target we intend to apply to
    };

    官方网址:
    https://docs.unrealengine.com/en-us/Gameplay/GameplayAbilitySystem/GameplayAttributesAndGameplayEffects

    有帮助就分享一下吧!

    转载请注明:少狼 – 敬畏知识的顽皮狗 » GameplayAbility [Attributes]——[数据属性]

    喜欢 1

*

还没有人抢沙发呢~