UE_C++ —— Gameplay Tags

目录

一,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 填充与该对象关联的标签;在大部分情况下,这意味着将基类中的标签复制到新容器中,但实现可以从多个容器收集标签,或调用蓝图函数以访问蓝图声明的标签或对象需要的任意内容;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975653.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉算法实战——三维重建(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 1. 三维重建领域简介 三维重建(3D Reconstruction)是计算机视觉的核心任务之一,旨在通过多视角图像、视频…

Spring5框架八:整合Mybatis

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…

AI学习第一天-什么是AI

AI的发展可以被分为四次浪潮&#xff0c;这包括符号主义、机器学习与神经网络&#xff0c;以及深度学习。在这些发展中&#xff0c;深度学习凭借其在处理非结构化复杂数据、强大的学习能力和可解释性方面的优势备受关注。深度学习技术的应用不仅提升了AI系统的性能&#xff0c;…

redis-bitmap使用场景

bitmap原理 Bitmap&#xff08;位图&#xff09;是一种基于二进制位的数据结构&#xff0c;用于高效地存储和操作大量的布尔值 可以对单个位进行读写操作 demo package org.example;import org.redisson.Redisson; import org.redisson.api.RBitSet; import org.redisson.ap…

华为 网络安全 认证

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 华为 网络安全 认证&#xff1a;保障信息安全的重要一环 在数字化时代的今天&#xff0c;网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…

ubuntu22.04连接github无法访问的问题

目录 说明安装 说明 此方案只针对虚拟机, 如果是云服务器(毕竟是官方维护, github还是能访问到的)多试几次肯定能够访问到的. 国内我们无法访问外网, 所以我们目前能够访问外网的途径基本上只能开佳速器. 所以我们需要选择一款加速器来帮助我们访问外网, 目前市面上很多佳速器…

【Research Proposal】基于提示词方法的智能体工具调用研究——难点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;一、难点分析1. 提示词方法的多样性和组合问题2. 智能体工具调用的准确性和效率问题3. 多模态任务中的复杂性问题 &#x1f4af;二、解决思路与策略&#x1f…

Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg

参考文章&#xff1a; https://blog.csdn.net/whatareyouding/article/details/144317654 https://www.cnblogs.com/Gredae/p/18362900 https://www.cnblogs.com/kn-zheng/p/17422707.html https://blog.51cto.com/u_16099344/10281495 https://www.tulingxueyuan.cn/tlzx/jsp…

智慧教室与无纸化同屏技术方案探讨与实现探究

引言 随着教育信息化的不断发展&#xff0c;智慧教室和无纸化同屏技术逐渐成为提升教学效率和质量的重要手段。大牛直播SDK凭借其强大的音视频处理能力和丰富的功能特性&#xff0c;在智慧教室和无纸化同屏领域积累了众多成功案例。本文将深入探讨基于大牛直播SDK的智慧教室、…

自制操作系统前置知识汇编学习

今天要做什么&#xff1f; 为了更好的理解书中内容&#xff0c;需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言&#xff0c;目前的汇编语言是学习操作系统的基础。 一&#xff1a;触发器 电路触发器的锁存命令默认是断开的&#xff0c;是控制电路触发器…

嘉立创EDA一自画元件及其封装

目录 一、创建元件 &#xff08;1&#xff09;新建元件。 &#xff08;2&#xff09;绘制元件。 二、绘制封装 &#xff08;1&#xff09;新建封装。 &#xff08;2&#xff09;绘制封装。 三、关联元件与封装 四、封装设计注意事项 在嘉立创&#xff08;JLCPCB&#xff…

《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进

以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析&#xff0c;并增加数据探索环节&#xff0c;同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图&#xff0c;方便对比。 《深度学习实战》第…

dataframe如何在末尾添加多行

如果要在pandas的dataframe中添加多行该如何实现&#xff1f;可通过以下常见方式在DataFrame末尾添加&#xff1a; ### 方法一&#xff1a;使用loc索引器 利用loc索引器分两次操作来添加两行数据。假设已有DataFrame对象df&#xff0c;要添加的两行数据分别存储在字典new_row…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…

插入排序(详解)c++

插⼊排序(Insertion Sort)类似于玩扑克牌插牌过程&#xff0c;每次将⼀个待排序的元素按照其关键字⼤⼩插⼊到前⾯已排好序的序列中&#xff0c;按照该种⽅式将所有元素全部插⼊完成即可 算法思想&#xff1a; 把待排序元素插入到已排序的序列中。想象一下一张一张整理扑克牌的…

【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解

目录 一、前言 二、蓝耘智算平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 应用场景 2.4 对DeepSeek 的支持 2.4.1 DeepSeek 简介 2.4.2 DeepSeek 优势 三、蓝耘智算平台部署DeepSeek-R1操作过程 3.1 注册账号 3.1.1 余额检查 3.2 部署DeepSeek-R1 3.2.1 获取…

ai-financial-agent - 为金融投资打造的AI代理

探索人工智能在投资研究中的应用。本项目仅用于**教育**目的&#xff0c;不用于真实交易或投资。 作者声明&#xff1a; 本项目仅用于教育和研究目的。 不用于真实交易或投资不提供任何保证或担保过去的表现并不代表未来的结果Creator 对经济损失不承担任何责任咨询财务顾问…

基于keepalived的Nginx高可用架构

一、概述 Keepalived 是一个基于 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;协议 的高可用性解决方案&#xff0c;为了解决静态路由器出现的单点故障问题&#xff0c;它能偶保证网络的不间断、稳定的运行。 二、核心功能 IP 漂移&#xff08;VIP&…

学术论文项目网站搭建教程【Github】

本教程使用的是linux系统&#xff0c;ubuntu20.04版本进行学术项目网站搭建 一&#xff1a;创建github的个人组织 我个人习惯使用自己的github组织【Your organizations】来进行学术项目网站的创建&#xff1a; New一个organization&#xff0c;点击Free中的Create a free o…

postman调用ollama的api

按照如下设置&#xff0c;不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住&#xff1a;110&#xff0c;1-12&#xff0c;之后所有数学计算必…