我不会抛下这个残破的世界

在现代游戏引擎中,有一个“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)的更多相关文章

  1. [UE4]IsValid方法妙用

    由于UE4中各个对象的创建顺序无法保证,因此可以使用IsValid方法判断一个对象是否有效,如果无效则初始化,如果有效则直接可以使用.

  2. ue4打包问题的巧妙解决——二分回退大法!

    昨天突然发生了一件非常恐怖的事--我的ue4项目居然不能打包了!! 大概是这么一回事:  UATHelper: 打包 (Windows (64位)): UnrealBuildTool: ERROR:  ...

  3. 深入浅出UE4网络

    UE4中的官方文档结构比较混乱,且有部分错误,不方便学习.笔者试图通过本文,整理出一篇关于UE4网络的文章,方便朋友们对UE4中的网络同步部分的认识,并有进一步理解.如有讲得不清楚明白的地方,还望批评 ...

  4. UE4技术总结——委托

    UE4技术总结--委托 目录 UE4技术总结--委托 一.定义 二.用法 2.1 声明与调用委托 2.1.1 单播委托 2.1.1.a 声明 2.1.1.b 绑定 2.1.1.c 执行委托 2.1.1 ...

  5. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  6. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  7. UE4新手引导之下载和安装虚幻4游戏引擎

    1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新.博客更新.新闻和商城等.自2015年起,该引擎已经提供免费下 ...

  8. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

  9. JavaScript的妙与乐(一)之 函数优化

    JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...

  10. Promise的前世今生和妙用技巧

    浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...

随机推荐

  1. js 自定義event

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. absible笔记第一章 (ansibles基础与playbook常用模块)

    一. ansibles基础与playbook 1.优先级问题 ANSIBLE_CONFIG                        ansible.cfg 项目目录                ...

  3. python bottle小记

    # coding=utf-8import bottle @bottle.route('/url/url', method=['GET','POST'])def big_data(): # 获取请求参数 ...

  4. equals的用法的注意事项

    String a="equals的用法"; String b=a.equals("equals的用法")?"相等":"不相等&qu ...

  5. Python——02.变量及标识符

    变量概念: -- 字面量:与字面上显示值一致的量称作字面量,在程序中可直接使用字面量:abc,123, 我是XX,等等 -- 变量:变量可通过赋值保存字面量,变量是可变的,跟随赋值的字面量不同而变化 ...

  6. 【Monkey】Monkey命令与使用

    Monkey 通过Monkey程序模拟用户触摸屏幕.滑动Trackball. 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,Monkey 主要用于Android 的压力测试  ...

  7. 裁员潮下,我月薪3W依旧坚挺

    近几年来产品经理一直是求职市场中的香饽饽: 年薪20w起.没有专业限制.职业天花板高,甚至行业中一直流传着一句话:产品经理是CEO的学前班. 在各种光环的加持下,不少应届生或有转行打算的职场人都将目光 ...

  8. Python接口测试request

    requests安装 用pip安装requests模块 pip install requests 一.Get的使用 格式:get(url, params=None, **kwargs) Get常见查询 ...

  9. CG3Y/ CG3Z 程序迁移

    /usr/sap/trans/cofiles/K900075.S4Q 固定值  文件目录(AL11)下去找 C:\Users\lenovo\Desktop\publici\K900075.S4Q /u ...

  10. pat题目整理

    Pat最终题目整理(菜鸟级别) 一:几个函数 ①Reverse()函数: stoi将字符串类型转为int型 :to_string关键字 头文件:#include<algorithm>; # ...