ue4射线查询主要使用LineTraceSingleByChannel和LineTraceSingleByObjectType函数进行

LineTraceSingleByChannel是通过Channel进行查询

LineTraceSingleByObjectType通过ObjectType进行查询

要理解这两个函数的区别,首先必须理解Channel和ObjectType的区别

此处的Channel指的是ECollisionChannel(可参考源码),而ObjectType指的是碰撞中的Object Type设置,如下图

当使用LineTraceSingleByObjectType函数是,对比的是ObjectType

而使用LineTraceSingleByChannel函数时,对比的是Channel,比如如下调用

const bool bHit = World->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, TraceParams);

当TraceChannel参数为ECC_Visibility时,判断Visibility对应的值,如果对应的值是Ignore,则忽略,如下图

此处还需注意Trace Responses和Object Responses的区别

Ignore、Overlap、Block的区别可在官网中看见,以下是截图

主要需要注意的是Overlap和Block的区别,只有碰撞双方都是Block,才会触发Hit Event(不触发Overlap事件),如果一方Overlap,一方Block,或者都是Overlap,会触发Overlap Event(Generate Overlap Events需打勾)

一般来说,Trace Responses对应Channel用来处理射线查询,Object Responses对应的Channel用来处理物理碰撞,它们都是可扩充的

通过查看在代码中的定义,我们知道它们使用了同样的枚举,如下

枚举中加了TraceQuery=1的表明为Trace Responses,否则为Object Responses

可通过Project Settings中的Collision界面新增Channel,如下是项目默认的界面

我们再来看看ShooterGame的界面

ShooterGame在Trace Channels中新增了Weapon,在Object Channels中新增了PROJECTILE和PICKUP

我们在ShooterGame的代码ShooterGame.h中可以看见定义了相关的宏

这些宏定义主要是出于可读性的考虑

在ShooterGame中,COLLISION_WEAPON主要作用是AI用来检测玩家是否在可见范围内,而PROJECTILE是火箭炮,PICKUP是可拾取物体,如子弹和加血包,当然,我们可以根据需求自己新增TraceChannel和ObjectChannel

接下来再看看Collision Presets,如下图

这些Presets可在本博文上面的截图中看到,双击可进行编辑

这样可简化component collision的设置

ue4碰撞检测及射线查询相关推荐

  1. 在ue4的CBL中查询(函数、变量)的几点提示

    第一.ue4经过汉化,很多变量和函数名变为了中文,或者中英文混杂. 例如"get player controller"被翻译成了"获取玩家控制器":" ...

  2. Unity中使用射线查询MeshCollider背面的方法

    之前遇到一个问题要从MeshCollider背面方向发出射线,直至检测到该射线与MeshCollider的相交点为止. 后来我用双面MeshCollider的方法解决了http://www.cnblo ...

  3. Unity 射线碰撞检测

    1 定义 射线是在三维世界中从一个点沿一个方向发射的一条无限长的线.在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射.射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得 ...

  4. [CGAL] 3D快速相交和距离计算(AABB_tree)- 三角形碰撞检测

    文章目录 AABB Tree简介 接口 构造 由Triangle构造 由Polyhedron构造 相交测试 构造出结果(Constructions) 距离计算 简单例子 三角形碰撞检测 更多CGAL文 ...

  5. NeHe OpenGL教程 第三十课:碰撞检测

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. Unity 2d碰撞检测

    碰撞检测 Collider2d 射线检测函数 Raycast 与 Cast 函数 Overlap 检测函数 参数 PhysicsScene2D 类检测函数 Physics2D 类检测函数 MonoBe ...

  7. [图形学] 《Real-Time Rendering》碰撞检测(三)

    目录 多重物体碰撞检测系统 广阶段的碰撞检测 Sweep-and-Prune 网格 总结 更多样的话题 时间临界的碰撞检测 距离查询 多重物体碰撞检测系统 考虑一个有弹簧和齿轮的旧式时钟,我们用一个计 ...

  8. Bullet3物理引擎碰撞检测相关代码片段

    近期公司要做多人末日生存类手游(对就是吃鸡!!) 所以笔者兴趣爱好就是钻研! 所以自己课下就调研下同步.碰撞检测.射线检测.移动寻路系统.定点数 在调研碰撞检测过程中,发现某Moba游戏源码中有相关片 ...

  9. 谷歌15个人工智能开源免费项目!开发者:懂了

    2019-11-21 14:37:20 关于人工智能的开源项目,相信开发者们已经目睹过不少了,Github上也有大把的资源.不过笔者今天说的并非来自Github,而是来自科技"大厂" ...

最新文章

  1. layui中监听select下拉框改变事件
  2. UIView上的控件使用push方法跳转
  3. 刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)
  4. C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)
  5. 【Selenium-WebDriver自学】Selenium测试设计技术(十三)
  6. C# DataSet性能最佳实践
  7. 扩大VMware虚拟机中linux硬盘空间
  8. java jtree 监听_Java JTree.addTreeExpansionListener方法代码示例
  9. (day 25 - 广度优先搜索 )剑指 Offer 32 - II. 从上到下打印二叉树 II
  10. POI设置背景色采坑记录
  11. 织梦采集侠推荐免登陆免规则伪原创发布配置
  12. 西宝高速公路模拟java大作业_——访西宝高速公路改扩建项目管理处处长王剑...
  13. c++中arccos()的用法(提醒自己)
  14. python求梯形面积_Python - 教你用Python进行简单的面积计算
  15. 国内App推广终极37个方法
  16. VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误
  17. java 废弃方法_在Java中使用Deprecated方法或类是错误的吗?
  18. 手机APP开发之MIT Appinventor详细实战教程(十),标准登陆界面的逻辑设计和数据库的有效使用
  19. 如何实现大屏数字滚动效果
  20. php时间戳与日期格式比大小,比较两个时间戳的大小

热门文章

  1. 书籍、固态硬盘、蓝牙音箱等礼品免费送!
  2. Linux网卡驱动(1)-网卡驱动架构分析
  3. nginx: [emerg] getpwnam(“nobody”) failed
  4. 密码学安全性证明中的挑战者和攻击者
  5. 【蓝桥杯选拔赛真题15】python绘制扇子 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
  6. Hot scene AGAIN!
  7. NVIC_EnableIRQ使能无法进行的原因
  8. Bookshelf Filling(二分)
  9. underscore随机数
  10. 华硕FL5800黑苹果教程