149人加入学习
(0人评价)
UE5.3 虚幻C++《战神》动作RPG游戏开发教程第一季

制作完成于 2025年8月8日 使用虚幻引擎5.3 版本5.3.2 vs2022

价格 免费

//将能力赋予角色时调用 virtual void OnGiveAbility( const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec ) override; //当能力结束时调用 virtual void EndAbility( const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCanceled ) override; 能不能给我讲一下这些参数都是干嘛的?

ChatGPT 说:

好问题 。 这两个函数 (OnGiveAbilityEndAbility) 是 GAS (Gameplay Ability System) 的核心扩展点,它们的参数都和能力的生命周期强相关。下面我给你逐个讲清楚:


- OnGiveAbility

virtual void OnGiveAbility( const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec ) override;

什么时候调用?

能力被授予角色 时调用(例如在 AbilitySet、AbilityGrant 里把某个 UGameplayAbility 添加到 ASC)。只会触发一次。

参数解释

  • ActorInfo (const FGameplayAbilityActorInfo*)

    • 描述了谁持有这个 Ability。

    • 包含 OwnerActor、AvatarActor、PlayerController、AbilitySystemComponent 等引用。

    • 你可以通过它快速拿到 Pawn、Controller、ASC。

    • 相当于上下文环境。

  • Spec (const FGameplayAbilitySpec&)

    • 描述了“这个 Ability 的实例”。

    • 包含:

      • Ability 指针(即你当前的 UGameplayAbility)

      • Level(技能等级)

      • InputID(触发输入 ID)

      • SourceObject(技能的来源,比如武器/装备)

      • Handle(唯一标识这个技能实例的句柄)

    • 以后触发、移除这个 Ability 时,都依赖 Spec.Handle 来区分。


- EndAbility

virtual void EndAbility( const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCanceled ) override;

什么时候调用?

技能主动结束(调用 EndAbility())或 被系统强制结束(例如打断、角色死亡、失去条件)时触发。

参数解释

  • Handle (FGameplayAbilitySpecHandle)

    • 标识哪一个 Ability 实例要被结束。

    • 对应 Spec.Handle,可唯一标识一个技能实例。

    • 在多人游戏里尤其重要,因为同一个 Ability 类可能有多个实例(不同等级、不同来源)。

  • ActorInfo (const FGameplayAbilityActorInfo*)

    • OnGiveAbility 里的同一个东西。

    • 提供上下文:谁在用这个 Ability。

  • ActivationInfo (const FGameplayAbilityActivationInfo)

    • 描述本次技能是如何被激活的。

    • 包含:

      • ActivationMode(比如 Predicting、Confirmed、Rejected)

      • PredictionKey(用于网络预测/回滚)

    • 在多人环境下特别有用,用来判断这个技能是“预测激活”还是“已确认”。

  • bReplicateEndAbility (bool)

    • 是否要把 EndAbility 的调用同步到客户端

    • 一般在服务端调用 EndAbility 时设为 true,确保客户端也同步结束。

  • bWasCanceled (bool)

    • 表示这个技能是否是“被取消”结束的。

    • 如果是 true,说明可能被中断/打断;如果是 false,说明是正常完成的。

    • 你可以用它来决定是不是播放“被打断动画”,还是播放“完成动画”。

 


- 总结一口气

  • ActorInfo = 谁在用能力(上下文)

  • Spec = 哪个能力实例(包含等级、来源、句柄)

  • Handle = 这个能力实例的唯一 ID

  • ActivationInfo = 这次激活的方式(预测/确认/拒绝)

  • bReplicateEndAbility = 是否要同步到客户端

  • bWasCanceled = 是否是“取消”结束

[展开全文]

授课教师

SiKi学院老师

课程特色

视频(28)
下载资料(1)

学员动态