游戏标签(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 @   yutuer  阅读(985)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示