游戏标签(GameplayTags)

GameplayTags是一系列树状的字符串,通过GameplayTagManager进行注册,这种名字在描述一个对象的状态或是分类时非常有用。

例如,我们可以在一个角色的眩晕过程中赋予他“State.Debuff.Control.Stun”标签,这样我们就可以通过检查角色身上标签的状态,替换掉之前用枚举或者布尔值处理的东西。

 

(UE_Note)在向角色添加Tag时,一般是添加到它的ASC上,UAbilitySystemComponent已经实现了IGameplayTagAssetInterface接口。如果你想给让其他对象持有标签,只需要让其也实现这个接口即可。

标签的应用

标签在GAS框架中被相当广泛的使用,其中比较有代表性的是游戏技能(GA)和游戏效果(GE)的默认实现中对标签的相关操作,这里以GA举例。

AbilityTags:该技能的标签。

CancelAbiliiesWithTag:当这个技能执行时,打断具有这些标签的技能。

BlockAbilitiesWithTag:当这个技能执行期间,阻止具有这些标签的技能激活。

ActivationOwnedTags:这个技能执行期间赋予技能施放者的标签。

ActivationRequiredTags:当Owner拥有全部这些标签时,技能才能施放。

ActivationBlockedTags:当Owner拥有这些标签之一时,技能无法施放。

SourceRequiredTags:当Avatar拥有全部这些标签时,技能才能施放。

SourceBlockedTags:当Avatar拥有这些标签之一时,技能无法施放。

TargetRequiredTags:当目标拥有全部这些标签时,技能才能施放。

TargetBlockedTags:当目标拥有这些标签之一时,技能无法施放。

 

游戏中的其他类似的逻辑,如目标眩晕时,追加一段攻击;自身狂暴时,攻击范围增加等,均推荐使用标签来做条件进行判断。

 

(UE_Note)ASC提供了Tag添加和删除的委托,可以通过ASC监听标签的添加等变化:

AbilitySystemComponent->RegisterGameplayTagEvent(FGameplayTag::RequestGameplayTag(FName("State.Debuff.Control")), EGameplayTagEventType::NewOrRemoved).AddUObject(this, &MyActor::OnControlled);

委托的回调方法带有相关的GameTag以及最新的TagCount。

virtual void OnControlled(const FGameplayTag Tag, int32 Count);
posted @ 2022-10-18 23:38  yutuer  阅读(1041)  评论(0)    收藏  举报