GamePaly

GAS - Gameplay Ability

2019-03-20  本文已影响0人  珏_Gray

GameplayAbility

Gameplay abilities是GAS中关于技能的抽象,可以非常傻瓜地实现法术,技能等等。除了可以实现冷却时间,技能消耗等其他RPG游戏中常见的施法机制外,还能自定义Ability Task来定制gameplay ability。这些tasks是在技能激活期间异步进行的,tasks中可以控制角色动画,粒子、声音效果等等,一旦任务完成或是接受到特定事件后,通过callback返回。Gameplay Ability支持replication。

举几个Abilities例子:

Granting and Revoking Abilities(赋予和收回能力) [ Only on Server !!!]

赋予能力

在Actor可以使用Ability之前,Actor的Ability System Component需要被赋予能力。实现的方法为:

赋予能力时,其实传入的参数中有InputID,这涉及到Ability的输入绑定。你的能力总是要绑定到一个用户输入上吧,这样玩家才能施放能力。绑定的方式在后面在介绍Gameplay Ability Component的文中叙述。

赋予能力后需要调用InitAbilityActorInfo来配置Owner Actor和Avatar Actor,通常在PossessedBy函数中调用,应为更换Controller时,注册的信息(ActorInfo)会过时。

RPGCharacterBase.cpp
收回能力

使用之前的FGameplayAbilitySpecHandle(对于Ability的唯一标识)作为输入,可以移除指定Ability。

Basic Usage(基本用法)

获得能力后,使用Ability的基本执行周期为:
1、 CanActivateAbility 让玩家在尝试使用能力之前知道是否可以激活该能力。比如,当能力不能激活是,UI图标变灰。
2、 CallActivateAbility 不检查能力是否可激活,直接调用能力。这个函数通常在CanActivateAbility和执行能力之间调用。

3、TryActivateAbility 典型执行Ability的方法。会先调用CanActivateAbility进行检测,通过后调用CallActivateAbility
4、 EndAbility 结束Ability的执行。除了CancelAbility会自动调用该函数,其他情况下都要手动调用该函数或是在蓝图中添加End Ability节点来结束Ability的执行,否则会产生各种bug。

Melee Base Ability

Tags

Gameplay Tags用于Gameplay Abilties之间的相互交互。


Tag组中各个变量的作用
Gameplay Ability蓝图

除了Tags变量,还有其他由引擎提供的变量供配置,如:Costs,Cooldowns,Ability Trigger等等。

Advanced(高级)

https://docs.unrealengine.com/en-us/Gameplay/GameplayAbilitySystem/GameplayAbility

Replication

Gameplay Abilities支持内部状态的replication和Gameplay Event,也可以关闭replication节省资源。Gameplay Ability Replication Policy可以被设置为“Yes”或“No”来打开或关闭replication。还可以设置Gameplay Net Execution Policy控制Ability如何replicate。共有四种方式:

还未试验过,大家可以尝试看看不同方式的效果。

Instancing Policy(实例化策略)

每当Ability执行时,系统会生成一个新的该Ability类实例用以跟踪当前Ability的进展。但如果Ability使用频繁,或者存在大量的单位,则类的大量实例化会导致性能问题。引擎提供了三种策略来平衡性能问题。

Triggering with Gameplay Events

Gameplay Events是一个数据结构,可以直接触发Gameplay Abilities,与上文描述的使用ability方式不同,是另一条执行ability的方式。 通常使用Gameplay events的方法是调用Send Gameplay Event To Actor并提供实现了IAbilitySystemInterface的Actor,和所需要的上下文信息。也可以直接在Ability System Componet上处理Gameplay Event。
注意!
当Gameplay Ability由Gameplay Event触发时,Ability不会走Activate Ability这条路,而是使用Activate Ability From Event 并提供更多的上下文信息。如果在蓝图Graph中实现了Activate Ability From Event,则Activate Ability就不会再被执行了。

上一篇 下一篇

猜你喜欢

热点阅读