ue4碰撞检测及射线查询
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碰撞检测及射线查询相关推荐
- 在ue4的CBL中查询(函数、变量)的几点提示
第一.ue4经过汉化,很多变量和函数名变为了中文,或者中英文混杂. 例如"get player controller"被翻译成了"获取玩家控制器":" ...
- Unity中使用射线查询MeshCollider背面的方法
之前遇到一个问题要从MeshCollider背面方向发出射线,直至检测到该射线与MeshCollider的相交点为止. 后来我用双面MeshCollider的方法解决了http://www.cnblo ...
- Unity 射线碰撞检测
1 定义 射线是在三维世界中从一个点沿一个方向发射的一条无限长的线.在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射.射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得 ...
- [CGAL] 3D快速相交和距离计算(AABB_tree)- 三角形碰撞检测
文章目录 AABB Tree简介 接口 构造 由Triangle构造 由Polyhedron构造 相交测试 构造出结果(Constructions) 距离计算 简单例子 三角形碰撞检测 更多CGAL文 ...
- NeHe OpenGL教程 第三十课:碰撞检测
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Unity 2d碰撞检测
碰撞检测 Collider2d 射线检测函数 Raycast 与 Cast 函数 Overlap 检测函数 参数 PhysicsScene2D 类检测函数 Physics2D 类检测函数 MonoBe ...
- [图形学] 《Real-Time Rendering》碰撞检测(三)
目录 多重物体碰撞检测系统 广阶段的碰撞检测 Sweep-and-Prune 网格 总结 更多样的话题 时间临界的碰撞检测 距离查询 多重物体碰撞检测系统 考虑一个有弹簧和齿轮的旧式时钟,我们用一个计 ...
- Bullet3物理引擎碰撞检测相关代码片段
近期公司要做多人末日生存类手游(对就是吃鸡!!) 所以笔者兴趣爱好就是钻研! 所以自己课下就调研下同步.碰撞检测.射线检测.移动寻路系统.定点数 在调研碰撞检测过程中,发现某Moba游戏源码中有相关片 ...
- 谷歌15个人工智能开源免费项目!开发者:懂了
2019-11-21 14:37:20 关于人工智能的开源项目,相信开发者们已经目睹过不少了,Github上也有大把的资源.不过笔者今天说的并非来自Github,而是来自科技"大厂" ...
最新文章
- layui中监听select下拉框改变事件
- UIView上的控件使用push方法跳转
- 刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)
- C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)
- 【Selenium-WebDriver自学】Selenium测试设计技术(十三)
- C# DataSet性能最佳实践
- 扩大VMware虚拟机中linux硬盘空间
- java jtree 监听_Java JTree.addTreeExpansionListener方法代码示例
- (day 25 - 广度优先搜索 )剑指 Offer 32 - II. 从上到下打印二叉树 II
- POI设置背景色采坑记录
- 织梦采集侠推荐免登陆免规则伪原创发布配置
- 西宝高速公路模拟java大作业_——访西宝高速公路改扩建项目管理处处长王剑...
- c++中arccos()的用法(提醒自己)
- python求梯形面积_Python - 教你用Python进行简单的面积计算
- 国内App推广终极37个方法
- VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误
- java 废弃方法_在Java中使用Deprecated方法或类是错误的吗?
- 手机APP开发之MIT Appinventor详细实战教程(十),标准登陆界面的逻辑设计和数据库的有效使用
- 如何实现大屏数字滚动效果
- php时间戳与日期格式比大小,比较两个时间戳的大小
热门文章
- 书籍、固态硬盘、蓝牙音箱等礼品免费送!
- Linux网卡驱动(1)-网卡驱动架构分析
- nginx: [emerg] getpwnam(“nobody”) failed
- 密码学安全性证明中的挑战者和攻击者
- 【蓝桥杯选拔赛真题15】python绘制扇子 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
- Hot scene AGAIN!
- NVIC_EnableIRQ使能无法进行的原因
- Bookshelf Filling(二分)
- underscore随机数
- 华硕FL5800黑苹果教程