【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线程也处于同一 ...
随机推荐
- jmeter安装配置
#前提需要有java的环境变量JAVA_HOME=/usr/local/java#jmeter变量CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/t ...
- ThinkPHP接收header自定义参数
// 请求拦截,配置Token等参数 Vue.prototype.$u.http.interceptor.request = (config) => { config.header['conte ...
- 攻防世界-fileinclude
一道简单的文件包含题目,源代码如下 一.代码分析 此题中关键代码为 分析此处代码可知,$lan的值是cookie中language所对应的值,当该值不为english时,会将$lan的值与.php字符 ...
- 使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑
TabLayout使用addTab方法添加标题,调用setupWithViewPager方法绑定ViewPager tabLayout.addTab(tabLayout.newTab().setTex ...
- Rocky linux command-1
在Linux下一切皆文件 everything is file,包括目录也是文件的一种而这些文件被分为七种类型: • -:普通文件 • d: 目录文件 • b: 块设备 • c: 字符设备 • l: ...
- SQL Server【基础】DDL 数据定义语言
DDL 操作数据库,schema,表等语句 Create,Alter,Drop,DECLARE database --1.说明:创建数据库 Create DATABASE database-name ...
- pgsql 自定义函数
CREATE OR REPLACE FUNCTION test1(id INTEGER,id1 INTEGER) RETURNS INTEGER LANGUAGE plpgsql AS $$ decl ...
- Web开发 学习 调试 调优
目录 快捷操作 调试方法 基本调试方法 修改参数和请求重发 Chrome抓包分析 性能优化 安全 cURL请求 参考 参考:MDN 调试HTML 参考:什么是浏览器开发者工具? 参考:检查和编辑页面与 ...
- node_modules/canvas npm ERR! command failed
Installing packages. This might take a couple of minutes.Installing react, react-dom, and react-scri ...
- 【C++复习】第九章 模板与群体数据(2)
学习重点:容器类型内部的实现机制,顺便复习前面各章内容.容器类型的具体实现不需要特别关注(目前不需要会裸手写这么一个容器类型) 1.群体/线性群体 群体的概念 群体是指由多个数据元素组成的集合体.群体 ...