UE_C++ —— Gameplay Tags

news/2025/2/24 12:19:39

目录

一,Defining Gameplay Tags

Adding Tags in Project Settings

Importing Tags from Data Table Assets

Defining Tags with C++

二,Using Defined Gameplay Tags

Applying Tags to Objects

Evaluating Tags with Conditional Functions

三,Advanced Topics

Setting Tag Editing Restrictions

Streamlining Tag Access in C++


        Gameplay Tags 是用户定义的字符串,充当概念性的分层标签;可应用于项目中的对象,并对其求值以驱动你的Gameplay实现,类似于检查布尔值或标记;

可使用它们传达许多不同的概念,包括:

  • 对象的属性,如 Character.Enemy.Zombie
  • 对象在执行或能够执行的事情,如 Movement.Mode.Swimming
  • 游戏事件和触发器,如 GameplayEvent.RequestReset

        Gameplay Tags 有任意数量的分层级别,以 . 字符分隔表示;如,标签 Event.Movement.Dash 有三个级别,其中 Event 是层级中最宽泛的标识符,而 Dash 是最具体的;

一,Defining Gameplay Tags

        必须将Gameplay Tags添加到标签字典,以便虚幻引擎识别它们;可以使用以下某种方法添加(或删除)标签:

  • 直接在 项目设置(Project Settings) 中添加或删除;
  • 从 数据表(Data Table) 资产导入;
  • 使用C++定义;

        以上所有方法都在 项目设置(Project Settings) 的 GameplayTags 分段中下设置;

Adding Tags in Project Settings

        定义新Gameplay Tags的最简单方式是,直接在 项目设置(Project Settings) 中添加;

  • 启用 Import Tags From Config;这会导入 .ini 文件中的所有Gameplay Tags,包括 Config/DefaultGameplayTags.ini 以及 Config/Tags 中的所有标签;
  • (可选)点击 Add new Gameplay Tag source 按钮,在 Config/Tags 中创建新的源 .ini 文件来存储Gameplay Tags;为项目的各个方面创建单独的源文件,可能对于大型项目的组织和协作很有用;
  • 点击 Gameplay Tag List 条目旁边的 Manage Gameplay Tags 按钮;这会打开 GameplayGameplay Tag Manager 窗口;
  • 在 Gameplay Tag Manager 窗口中,点击左上角的 添加(Add (+)) 按钮;
  • 输入所需的 Name 、 Comment 和 Source;Comment显示在标签的提示文本上,Source 是存储标签的 .ini 文件;
  • 点击 Add New Tag 按钮;

        可重命名、删除、复制标签或向其添加新的子标签,方法是在列表中右键点击它并从快捷菜单中选择相应选项;若标签的来源不是 .ini 文件,则不能在 Gameplay Tag Manager 窗口中重命名或删除;

注,可以使用文本编辑器编辑标签 .ini 源文件,但必须重启编辑器才能加载更改;

Importing Tags from Data Table Assets

        可使用行类型 GameplayTagTableRow 从 Data Table 资产导入Gameplay Tags;使用此方法可以:

  • 在 Data Table Editor 中管理标签;
  • 在编辑器运行期间更改数据表;
  • 通过将 .csv 或 .json 文件作为数据表导入来添加标签;

要从数据表导入标签,请在 Project Settings 中执行以下操作:

  • 点击 Gameplay Tag Table List 旁边的 Add Element (+) 按钮;
  • 点击新索引的下拉菜单并选择数据表;
Defining Tags with C++

        可使用 NativeGameplayTags.h 中定义的宏,来通过C++定义Gameplay Tags:

  • UE_DECLARE_GAMEPLAY_TAG_EXTERN :在 .h 文件中用于声明 .cpp 文件中定义的标签;
  • UE_DEFINE_GAMEPLAY_TAG :在 .cpp 文件中用于定义 .h 文件中声明的标签,不带提示文本注释;
  • UE_DEFINE_GAMEPLAY_TAG_COMMENT :在 .cpp 文件中用于定义 .h 文件中声明的标签,带有提示文本注释;
  • UE_DEFINE_GAMEPLAY_TAG_STATIC :在 .cpp 文件中用于定义仅对定义文件可用的标签;不同于其他 DEFINE 宏,这不应该与 DECLARE 宏调用配对;

注,必须将 GameplayTags 模块添加到项目的 Build.cs 文件,才能在C++中访问Gameplay Tags功能;

//Example Implementation
// In .h file
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Movement_Mode_Walking);

// In .cpp file
UE_DEFINE_GAMEPLAY_TAG_COMMENT(Movement_Mode_Walking, "Movement.Mode.Walking", "Default Character movement tag");

二,Using Defined Gameplay Tags

        经过定义后,可将标签应用于对象并对标签求值,以在项目中驱动Gameplay;

Applying Tags to Objects
  • 将 Gameplay Tag Container (FGameplayTagContainer) 类型变量添加到对象;此变量存储多个Gameplay Tags;
  • 使用“添加Gameplay标签”(AddTagAddTag)函数将指定标签添加到容器;

注,可直接使用Gameplay Tag(FGameplayTagFGameplayTagFGameplayTag)类型变量,但对象往往有多个标签,因此经常需要Gameplay Tag Containers;

Evaluating Tags with Conditional Functions

        可基于对象的标签来驱动Gameplay实现;要对存储在对象的Gameplay Tag Containers中的标签求值,可以使用各种条件函数,如:

  • 有标签(HasTag)
  • 有任何标签(HasAny)
  • 有所有标签(HasAll);

        除了 HasAll 之类的 All 函数之外,使用空的Gameplay Tag Containers作为输入参数调用条件函数会返回false;这是因为,容器中的所有标签在源集内都没有缺失;

Gameplay Tag Queries

        Gameplay Tag Query(FGameplayTagQuery)类型变量组合了条件函数,以更直白精简的方式建立复杂逻辑;

Gameplay Tag查询支持以下表达式:

  • Any Tags Match :测试是否能在容器中发现查询中的至少一个标签;
  • All Tags Match :测试查询中的所有标签是否都在容器中;如查询为空,这会返回true;
  • No Tags Match :测试查询中的所有标签是否都不在容器中;如果查询为空,这会返回true;

此外,查询支持基于子表达式求值的以下根表达式:

  • Any Expressions Match :测试是否有任何子表达式返回true;
  • All Expressions Match :测试是否所有子表达式都返回true;如没有子表达式,这会返回true;
  • No Expressions Match :测试是否没有子表达式返回true;如没有子表达式,这会返回true;

三,Advanced Topics

Setting Tag Editing Restrictions

        可限制用户对Gameplay Tag进行编辑(在任意层级级别);

        要限制编辑,请在 Project Settings 的 Advanced Gameplay Tags > Advanced 下进行以下设置:

  • Restricted Config Files:用于存储受限制标签的 .ini 文件列表,这些标签与具有编辑权限的 所有者(Owners) 列表配对;
  • Restricted Tag List :显示 Gameplay Tag Manager 窗口,可在该窗口中修改受限制标签;

        如有用户(非列表中的所有者)尝试编辑受限制的标签,将弹出警告消息,要求用户确认自己已获得所有者的编辑授权;如用户无法确认,则不会做出编辑;

注,受限制的标签在创建之后,不能在编辑器中删除;要删除受限制的标签,必须直接编辑 .ini 文件;

Streamlining Tag Access in C++

        可使用 ​​​​​​​IGameplayTagAssetInterface 改进Gameplay标签实现;该接口提供了以下优势:

  • 不用显式将对象转型就可以获取对象的标签;
  • 可以为每种可能的类型编写自定义代码;

        实现该接口并重载 GetOwnedGameplayTags ​函数,就能创建一种能够被蓝图访问的方法,来为 Gameplay Tag Container 填充与该对象关联的标签;在大部分情况下,这意味着将基类中的标签复制到新容器中,但实现可以从多个容器收集标签,或调用蓝图函数以访问蓝图声明的标签或对象需要的任意内容;


http://www.niftyadmin.cn/n/5864317.html

相关文章

Python pip 缓存清理:全面方法与操作指南

在使用 Python 的 pip 进行包安装时,pip 会将下载的包缓存起来,以加快后续相同包的安装速度。不过,随着时间推移,缓存会占用大量磁盘空间,这时你可以对其进行清理。下面为你介绍不同操作系统下清理 pip 缓存的方法。 …

Node.js中如何修改全局变量的几种方式

Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…

2025版-Github账号注册详细过程

目录 1.访问GitHub官网 2. 点击“Sign up”按钮 3. 填写注册信息 4. 验证机器人 5. 点击“Create account”按钮 6. 验证邮箱 7. 完成注册 8. 初始设置(可选) 9. 开始使用 注意事项 1.访问GitHub官网 打开浏览器,访问 GitHub官网。 …

IDEA通过Maven使用JBLJavaToWeb插件创建Web项目

第一步:IDEA下载JBLJavaToWeb插件 File--->Settings--->Plugins--->Marketplace搜索: JBLJavaToWeb 第二步:创建普通Maven工程 第三步: 将普通Maven项目转换为Web项目

KubeKey一键安装部署k8s集群和KubeSphere详细教程

目录 一、KubeKey简介 二、k8s集群KubeSphere安装 集群规划 硬件要求 Kubernetes支持版本 操作系统要求 SSH免密登录 配置集群时钟 所有节点安装依赖 安装docker DNS要求 存储要求 下载 KubeKey 验证KubeKey 配置集群文件 安装集群 验证命令 登录页面 一、Ku…

R语言安装教程(附安装包)R语言4.3.2版本安装教程

文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手,还是希望更新知识体系的专业人士,只要按照本…

Java NIO与传统IO性能对比分析

Java NIO与传统IO性能对比分析 在Java中,I/O(输入输出)操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型,而Java NIO(New I/O)引入了非阻塞和基于通道(Channel)和缓冲区&a…

单页图床HTML源码+本地API接口图床系统修复版源码

源码介绍 图床系统是一种用于存储和管理图片文件的在线服务。它允许用户上传图片文件,并生成相应的图片链接,从而方便用户在网页、社交媒体或其他平台上分享图片。 PS:源码压缩包分为两个版本,一个是调用360第三方api接口,另外一…