【UE4】GameplayTag的妙用(ActorTag)
我不会抛下这个残破的世界
在现代游戏引擎中,有一个“Tag”的概念,无论是在Unreal还是Unity中,他们都有大同小异的tag实现。
此篇随笔以Actor Tag举例,简单讲解一些常见情况下它的妙用,后续我还会更新例如网络同步中的FastReplication使用GameplayTag加快复制过程等其他内容,此文章只是随笔,讲解不好,也不全面,还请各位读者理解。
首先,我们要先了解 Gameplay Tag是什么样的东西,这里贴出Unreal Engine Documentation上的解释。
Gameplay Tag可以添加到任何项目中,将对象与Tag相关联,可以用于为您的项目识别、匹配、分类或过滤它们。
很抽象吧?别担心,我现在会用一个例子简单说明它。
例如我们的武器Actor中的UBulletComponent有一个通过射线检测造成伤害的功能,如果您按照大多数人的写法,在射线检测击中对象时,您必须做一个强制类型转换来确定对象的类型。但这样对性能是相当不好的,我有一个轻松的解决方案。
//旧方法伪代码
if(HitResult.GetActor() != nullptr)
{
if(Cast(HitResult.GetActor()))
{
UGameplayStatics::ApplyPointDamage(HitResult.GetActor());
}
}
接下来是使用GameplayTag的新方法,实际上我们不需要任何强制类型转换,只需要判断tag,是否符合我们想要的即可。
//新方法伪代码
if(HitResult.GetActor().ActorHasTag("Damageable"))
{
ApplyDamage
}
这只是GameplayTag的一个小用处,实际上它的妙用可不止这一个,物理碰撞结果 节省网络复制带宽 GameplayAbilitySystem中标记玩家技能id……
实际上我们只需要知道GameplayTag的作用“识别 匹配 分类”,并举一反三,我们就可以利用它去优化很多我们之前做的事情。
文章到这里就结束了,希望能够帮助到各位。
夜に駆ける - YOASOBI
【UE4】GameplayTag的妙用(ActorTag)的更多相关文章
- [UE4]IsValid方法妙用
由于UE4中各个对象的创建顺序无法保证,因此可以使用IsValid方法判断一个对象是否有效,如果无效则初始化,如果有效则直接可以使用.
- ue4打包问题的巧妙解决——二分回退大法!
昨天突然发生了一件非常恐怖的事--我的ue4项目居然不能打包了!! 大概是这么一回事: UATHelper: 打包 (Windows (64位)): UnrealBuildTool: ERROR: ...
- 深入浅出UE4网络
UE4中的官方文档结构比较混乱,且有部分错误,不方便学习.笔者试图通过本文,整理出一篇关于UE4网络的文章,方便朋友们对UE4中的网络同步部分的认识,并有进一步理解.如有讲得不清楚明白的地方,还望批评 ...
- UE4技术总结——委托
UE4技术总结--委托 目录 UE4技术总结--委托 一.定义 二.用法 2.1 声明与调用委托 2.1.1 单播委托 2.1.1.a 声明 2.1.1.b 绑定 2.1.1.c 执行委托 2.1.1 ...
- 【CSS进阶】伪元素的妙用--单标签之美
最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- UE4新手引导之下载和安装虚幻4游戏引擎
1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新.博客更新.新闻和商城等.自2015年起,该引擎已经提供免费下 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- JavaScript的妙与乐(一)之 函数优化
JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...
- Promise的前世今生和妙用技巧
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...
随机推荐
- Panel容器中显示多个窗体并通过按钮实现窗体切换
Panel容器中显示多个窗体并通过按钮实现窗体切换 在项目开发中经常会有如下需求: 主窗体formMain中有个一Panle: 在Panel内显示多个窗体,如form1,form2--,分别通过不同按 ...
- vscode 远程连接 linux 远程开发
1. 安装拓展 remote-ssh 2. 设置云主机 git 控制台使用命令 ssh-keygen # 生成一个 ssh key # 登录远程主机 # ssh ubuntu@123.123.123. ...
- Salesforce 发送Email时遇到的问题(Case当中的Filed不出现Email选项:ケースのフィールドにメールタブが表示されない)。
普段はケースの発生源はメールと選択する場合.ディフォルトで「フィールド」の中に「メール」というタブが出てきますが. (平时当我们选择[Case]的[来源]为[Email]时,默认就会在field中出现 ...
- ROS2
ROS2核心概念 节点 创建节点流程 编程接口初始化 创建节点并初始化 实现节点功能 销毁节点并关闭接口 #!/usr/bin/env python3 import rclpy # ROS2 Pyth ...
- 怎么才能卸载inventor?完全彻底卸载删除干净inventor各种残留注册表和文件的方法和步骤
怎么才能卸载inventor?完全彻底卸载删除干净inventor各种残留注册表和文件的方法和步骤.如何卸载inventor呢?有很多同学想把inventor卸载后重新安装,但是发现inventor安 ...
- Redis容器的二种常用启动方式
#==========redis:latest镜像的容器启动命令============# docker run -d --name redis01 -p 6379 --restart unless- ...
- 快速搭建maven私服仓库并配置
1.第一步,通过官方网站下载tar.gz包上传到服务器并解压 随后进入解压目录,并执行./bin/nexus start 此时可能会出现如下异常 处理这个问题很容易,找到bin下的nexus文件,vi ...
- SSH反向隧道实现内网穿透
1.客户端配置 /home/tsingyundev/zyy bind209.sh内容 ssh -fCNL *:1234:localhost:10022 localhost ssh209.sh内容 ss ...
- 读取本地xml或json等本地文件报错Failed to load file:///D:/xml/test.xml: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
问题如上图: 原因及解析:在浏览器打开本地的html文件, 上面proxy中的url获取的就是一个本地文件, 协议是file://,如果是在服务器启动的话,则使用的是http或者https协议.出于安 ...
- D2-Net: Weakly-Supervised Action Localization via Discriminative Embeddings and Denoised Activations概述
1.针对的问题 目前大多数弱监督动作定位方法通常依赖于分离前景和背景区域(前-背景分离)学习TCAMs,但是在弱监督设置下,学习到的TCAM会存在噪声,而这些方法并没有明确地处理其噪声输出. 2.主要 ...