Gameplay tag在GAS中是很重要的标记,与Ability、Event和Effect关联紧密,用来表示各种状态。Cooldown(技能冷却)也是利用tag完成的。Tags可以有层级,用“.”隔开,如"Family.Genus.Species",则父级为"Family.Genus",再往上为"Family"。通常一个游戏对象会有许多个tags,因此,引擎提供了Gameplay Tag Container来处理tag的问询(tag query)。Gameplay tag可用于任意项目,作用是识别、匹配、分组、过滤游戏对象。
Gameplay Tag Not Component Tag
现在Gameplay Tag插件在引擎中是默认开启的,但要注意gameplay tag和component tag的区别。
Gameplay Tag Setting
Gameplay Tag的设置界面在project settings中:
创建Gameplay Tags
创建(删除)gameplay tags的三种方法:
-
在gameplay tags设置界面手动添加和删除。默认的tags信息会保存到 Config/DefaultGameplayTag.ini文件里。
勾选Import Tags from Config会加载Config/DefaultGameplayTag.ini和Config/Tags/xxx.ini中的信息。 -
直接编辑.ini文件。
-
使用Data Table Assets。
编辑行类型为 GameplayTagTableRow的DataTable,然后添加到设置界面的GameplayTagTableList中 。
管理Gameplay Tags
如图可以对tags进行重命名,删除,查找引用等操作。
设置编辑限制(Editing Restriction)
可以禁用对特定标签的编辑,用的不多,详见官方文档。
https://docs.unrealengine.com/en-us/Gameplay/Tags
Gameplay Tag Test Operation(标签的检测操作)
标签之间可以进行匹配。操作对象为gameplay tag或gameplay tag container。表中{}表示tag container。
Gameplay Tag Queries(标签问询)
可以创建tag query对象,使得匹配更有效率。
Using Gameplay Tags In Your Game
说了那么多,如何使用gameplay tags呢?很简单,给对象添加gameplay tags(FGameplayTag)或Gameplay Tag Containers(FGameplayTagContainer)变量即可。
如果使用GAS,则gameplay tag会被ability,effect等使用,不必手动添加gameplay tag和tag container对象。
Quickly Accessing Gameplay Tags in C++
引擎提供了IGameplayTagAssetInterface接口,通过重写该接口的GetOwnedGameplayTags函数,可以方便地在不同类的对象中使用相同接口获得gameplay tags。