GameplayTag 是 GAS 的"通用语言"——状态、技能、输入、资产引用全部走标签。这篇笔记整理一个 ARPG 项目里上千个标签的组织方式:分类、文件结构、命名约定、性能要点。
- 层次结构:用
. 分隔的层次路径,父标签可匹配所有子标签(HasTag 和 HasTagExact 行为不同) - 配置驱动:标签全部定义在
.ini 文件,引擎启动时加载 - 运行时安全:标签以哈希存储,比较是 O(1) 整数比较
- DevComment:每个标签可附带开发注释,便于检索与文档化
| 文件 | 内容 | 量级 |
|---|
Config/DefaultGameplayTags.ini | 核心技能/状态/动作标签 | ~1600 行 |
Config/Tags/SpellRingFlightTags.ini | 战斗施法/近战环/飞行物标签 | ~240 行 |
Config/Tags/PlayerInputTags.ini | 玩家输入绑定标签 | ~300 行 |
Config/Tags/GameplayCueTags.ini | VFX/SFX 特效触发标签 | ~600 行 |
Config/Tags/CharacterTags.ini | 角色阵营与身份标签 | ~110 行 |
Config/Tags/SkillTreeTags.ini | 技能树节点标签 | ~120 行 |
Config/Tags/InventoryItemTags.ini | 道具分类与定义标签 | ~260 行 |
Config/Tags/QuestGameplayTags.ini | 任务状态标签 | ~220 行 |
Config/Tags/DialogueGameplayTags.ini | 对话系统标签 | ~30 行 |
Config/Tags/CombatExtensionGameplayTags.ini | Boss 战斗扩展标签 | 大文件 |
[/Script/GameplayTags.GameplayTagsList]
+GameplayTagList=(Tag="AbilityTagCategory.Action.Dodge",DevComment="玩家闪避动作")
+GameplayTagList=(Tag="AbilityTagCategory.Action.Dodge.EX",DevComment="强化闪避")
DefaultGameplayTags.ini 开头还会有标签重定向(Redirects),用于版本间标签迁移:
[/Script/GameplayTags.GameplayTagsSettings]
+GameplayTagRedirects=(OldTagName="Aiming",NewTagName="AimGun")
+GameplayTagRedirects=(OldTagName="WeaponSlot.Melee",NewTagName="WeaponSlot.MeleeMain")
用途:标识一个技能的类型,用于 TagRelationshipMapping 的阻止/取消逻辑,以及能力 AbilityTags / CancelAbilitiesWithTag 配置。
| 标签 | 说明 |
|---|
AbilityTagCategory.Action.Dodge | 普通闪避 |
AbilityTagCategory.Action.Dodge.EX | EX 闪避(强化版) |
AbilityTagCategory.Action.Dodge.Perfect | 完美闪避(格挡时机) |
AbilityTagCategory.Action.Jump | 跳跃 |
AbilityTagCategory.Action.JumpStart | 起跳阶段 |
AbilityTagCategory.Action.Equipping | 装备武器 |
AbilityTagCategory.Action.GroundedAndStandUp | 倒地起身 |
AbilityTagCategory.Action.HitRecover | 受击后恢复 |
AbilityTagCategory.Action.Performance | 过场/表演动作 |
| 标签 | 说明 |
|---|
AbilityTagCategory.Action.HitReaction.Micro | 微小受击(碰撞) |
AbilityTagCategory.Action.HitReaction.Light | 轻度受击 |
AbilityTagCategory.Action.HitReaction.Medium | 中度受击 |
AbilityTagCategory.Action.HitReaction.Heavy | 重度受击(击退) |
AbilityTagCategory.Action.GunHitBack | 枪击弹开 |
AbilityTagCategory.Action.GunHitWeakpoint | 枪击弱点命中 |
AbilityTagCategory.Action.Katana
├─ .Default 刀默认连招
├─ .Light.01 ~ .04 轻攻击 1-4
├─ .Heavy.01 ~ .03 重攻击 1-3
├─ .JumpAttack 跳跃攻击
├─ .SprintAttack 冲刺攻击
├─ .HitBack 被弹反
├─ .HoldStand 蓄力站立
├─ .Sheathe 收刀
├─ .WeaponSwitchAttack 切换武器攻击
├─ .FinishingAttack 处决攻击
└─ .Ougi 奥义(大招)
| 标签 | 说明 |
|---|
AbilityTagCategory.Action.AimGun | 通用瞄准 |
AbilityTagCategory.Action.AimGun.Revolver | 左轮瞄准 |
AbilityTagCategory.Action.AimGun.AssaultRifle | 步枪瞄准 |
AbilityTagCategory.Action.AimGun.Shotgun | 霰弹瞄准 |
AbilityTagCategory.Action.Gun.StepBack | 枪械后步 |
AbilityTagCategory.Action.GunOugi | 枪械奥义 |
AbilityTagCategory.Action.Reload.Revolver | 左轮装弹 |
AbilityTagCategory.Action.Enemy.<EnemyType>
├─ .Atk1 / .Atk2 / .Atk3 / .Atk4
├─ .DashAttack1 / .DashAttack2 / .DashAttack3
├─ .Shoot / .Grenade
└─ .SwitchWeapon.*
用途:直接添加到 ASC 上,表示当前状态。被 TagRelationshipMapping、能力激活条件、动画状态机广泛使用。
| 标签 | 说明 | 设置者 |
|---|
OwnedTagsCategory.SpecState.DISM | 已肢解 | 肢解系统 |
OwnedTagsCategory.SpecState.DISMFalling | 肢解后跌落 | 肢解系统 |
OwnedTagsCategory.SpecState.Break | 破防(Break 归零) | AS_Break |
OwnedTagsCategory.SpecState.KnockOut | 击倒 | AS_KnockOut |
OwnedTagsCategory.SpecState.Dead | 死亡 | AS_Health |
OwnedTagsCategory.SpecState.Stagger | 硬直 | AS_Stagger |
Dead 由 UAbilitySystemGlobalsProject::Get().DeadTag 缓存,在 UEnemyAnimInstance 中监听并触发死亡动画。
| 标签 | 说明 |
|---|
OwnedTagsCategory.PhysicsControl.Ragdoll | 布娃娃物理激活 |
OwnedTagsCategory.PhysicsControl.BlendToRagdoll | 正在过渡到布娃娃 |
OwnedTagsCategory.PhysicsControl.Recovery | 布娃娃恢复中 |
| 标签 | 说明 |
|---|
OwnedTagsCategory.Identity.Player | 玩家角色 |
OwnedTagsCategory.Identity.Enemy.* | 敌方(含子标签) |
OwnedTagsCategory.Identity.NPC | 非战斗 NPC |
| 标签 | 说明 |
|---|
OwnedTagsCategory.State.InCombat | 处于战斗 |
OwnedTagsCategory.State.Stunned | 眩晕中 |
OwnedTagsCategory.State.Invincible | 无敌帧 |
OwnedTagsCategory.State.Blocking | 格挡中 |
OwnedTagsCategory.BuffState.DefenseUp | 防御提升 Buff |
技能(UGameplayAbilityProject)通过此标签在运行时查找对应的 USpellAsset。标签与数据资产一一对应。
Spell.<WeaponType>.<Variant>
├─ .01.Light ~ .08.Light 轻攻击 1-8
├─ .09.Heavy 重攻击
├─ .09.Heavy.EX EX 版
├─ .10.Heavy.Fullcharged 蓄满版
└─ .10.Heavy.Fullcharged.EX 蓄满 EX 版
UAbilityTask_SpellRing 通过此标签在对象池中查找并分配 ASpellRing 实例。
SpellRing.<WeaponType>.<Variant>.<Move>.<Index>
示例:
SpellRing.Katana.Default.01.Light.1
SpellRing.Katana.Default.10.Heavy.1
SpellRing.Katana.Default.10.Heavy.1.EX
SpellRing.Katana.Default.10.Heavy.1.Fullcharged
SpellRing.Katana.Ougi
SpellRing.Unarmed.JumpAttack
SpellFlight.<Faction>.<Weapon>.<Variant>
示例:
SpellFlight.Player.Revolver
SpellFlight.Player.Revolver.Ougi
SpellFlight.Player.Revolver.ThroughBullet
SpellFlight.Player.Rifle.PiercingBullet
SpellFlight.Enemy.Grenade
SpellFlight.Boss.ProjectileExplode
标识 Ring/Flight 使用的碰撞检测通道/Socket 类型,传递给碰撞检测系统:
| 标签 | 说明 |
|---|
CollisionTrace.HandL / .HandR | 左/右手碰撞检测 |
CollisionTrace.WeaponL / .WeaponR | 左/右手武器碰撞检测 |
CollisionTrace.WeaponR.ActorSpace | 右手武器(Actor 坐标空间) |
CollisionTrace.WeaponR.Extent | 右手武器(扩展范围) |
CollisionTrace.FootL / .FootR | 左/右脚碰撞检测 |
CollisionTrace.Flight | 飞行物碰撞 |
CollisionTrace.Flight.Shuriken | 手里剑飞行物碰撞 |
触发 UGameplayCueManageComponent 中的 VFX/SFX:
| 标签前缀 | 内容 |
|---|
GameplayCue.AssaultRifle.* | 突击步枪射击/换弹音效 |
GameplayCue.Burning.* | 燃烧效果 |
GameplayCue.CameraShake.* | 镜头震动 |
GameplayCue.Dismember.* | 肢解特效(各部位) |
GameplayCue.Dodge.* | 闪避特效 |
GameplayCue.Katana.* | 刀各招式特效与音效 |
GameplayCue.Gun.* | 枪械通用音效 |
GameplayCue.Revolver.* | 左轮专属音效特效 |
GameplayCue.HitReaction.* | 受击反应(轻/中/重) |
GameplayCue.Blood.* | 血迹特效(类型由 SpellDamageFXTypeTag 决定) |
GameplayCue.Boss.* | Boss 技能特效 |
Enhanced Input 的 InputAction 通过此标签与 ProcessAbilityInput() 关联,也用于 AbilitySet 的 InputTag 字段。
| 标签 | 说明 |
|---|
InputTag.ActivateWeaponSlot.0 ~ .3 | 激活武器槽 0-3 |
| 标签 | 说明 |
|---|
InputTag.Dodge | 普通闪避 |
InputTag.Dodge.EX | EX 闪避 |
InputTag.Dodge.Perfect | 完美闪避触发 |
InputTag.Jump | 跳跃 |
InputTag.Reload | 通用装弹 |
InputTag.Weapon.Katana
├─ .LightAttack.01 ~ .12
├─ .HeavyAttack.01 ~ .12
├─ .EXAttack.01 ~ .04
├─ .JumpAttack
├─ .SprintAttack
├─ .Ougi
├─ .HoldStand
└─ .WeaponSwitchAttack
| 标签 | 说明 |
|---|
InputTag.Weapon.Gun.Aim | 枪械瞄准 |
InputTag.Weapon.Gun.Shoot | 射击 |
InputTag.Weapon.Gun.StepBack | 枪械后步 |
InputTag.Weapon.Gun.Ougi | 枪械奥义 |
InputTag.Weapon.Revolver.Reload | 左轮装弹 |
用于 GE 的 SetByCaller,也用于 UAbilitySystemGlobalsProject 缓存常用属性引用:
| 标签前缀 | 对应属性集 | 主要属性 |
|---|
Attribute.HealthSet.* | AS_Health | Health, MaxHealth, MetaDelta |
Attribute.StaminaSet.* | AS_Stamina | Stamina, MaxStamina, MetaDelta |
Attribute.BreakSet.* | AS_Break | Break, MaxBreak, RegenValue, TrimPercent, ResetSeconds |
Attribute.PoiseSet.* | AS_Poise | Poise, MaxPoise, PoiseLevel |
Attribute.StaggerSet.* | AS_Stagger | Stagger, MaxStagger, RegenValue, ThresholdValue |
Attribute.KnockOutSet.* | AS_KnockOut | KnockOut, MaxKnockOut, RegenValue |
Attribute.DismemberSet.* | AS_Dismember | Dismember, MaxDismember, RegenValue |
Attribute.HatredSet.* | AS_Hatred | Hatred, MaxHatred |
每个角色实体的唯一身份标识,用于对话条件查询、任务触发、特殊交互。
Faction.<Name>
├─ Faction.Church
├─ Faction.Heros
├─ Faction.Survivors
└─ Faction.<Custom>
GameCharacterTag.<Name>
├─ GameCharacterTag.FollowNPC 跟随型 NPC
├─ GameCharacterTag.GuideQuestNPC 引导任务 NPC
├─ GameCharacterTag.InteractNPC 可交互 NPC
└─ GameCharacterTag.<NamedNPC> 特定命名角色
[系统].[子系统].[实体].[动作/状态].[变体]
示例:
AbilityTagCategory . Action . Katana . Light . 01
SpellRing . Katana . Default . Light . 01 . 1
SpellFlight . Player . Revolver . Ougi
OwnedTagsCategory . SpecState . Dead
GameplayCue . Katana . Light01 . Strike
| 约定 | 说明 |
|---|
| 全部 PascalCase | LightAttack,不用 lightattack |
| 数字序号两位补零 | 01、02,不用 1、2 |
变体用 .EX .Fullcharged .New | 明确标记版本 |
| 父标签表达类别 | AbilityTagCategory.Action.Katana 是所有刀技能的父标签 |
| 叶节点最具体 | 每个技能唯一对应一个叶节点 |
- 确定标签所属类别和文件
- 在对应
.ini 末尾添加:+GameplayTagList=(Tag="SpellRing.NewWeapon.Attack01",DevComment="新武器攻击01近战环")
- 重启编辑器(或 Project Settings → Gameplay Tags → Refresh 热重载)
- 在相应数据资产中引用
| 用途 | 标签 |
|---|
| 检查死亡 | OwnedTagsCategory.SpecState.Dead |
| 检查眩晕 | OwnedTagsCategory.State.Stunned |
| 检查战斗中 | OwnedTagsCategory.State.InCombat |
| 检查无敌 | OwnedTagsCategory.State.Invincible |
| 检查格挡 | OwnedTagsCategory.State.Blocking |
| 检查破防 | OwnedTagsCategory.SpecState.Break |
以下标签由 UAbilitySystemGlobalsProject 启动时缓存为 FGameplayTag 成员,直接访问比 FGameplayTag::RequestGameplayTag() 更快:
| 成员 | 对应标签 |
|---|
DeadTag | OwnedTagsCategory.SpecState.Dead |
StaggerTag | OwnedTagsCategory.SpecState.Stagger |
KnockOutTag | OwnedTagsCategory.SpecState.KnockOut |
DismemberTag | OwnedTagsCategory.SpecState.DISM |
DismemberFallingTag | OwnedTagsCategory.SpecState.DISMFalling |
性能建议:热路径(Tick / Hit 检测)始终使用缓存标签,避免每帧调用 FGameplayTag::RequestGameplayTag(FName(TEXT("..."))) 造成哈希表查找。