在虚幻引擎中使用射线检测

游戏中经常需要与世界交互
比如地上有一个道具 我需要点击它并捡起来
如何在代码中得到这个道具? 就要用到射线检测
射线检测就是生成一条线,从起点到终点发射的过程中,检测并获取碰到的物体


一、蓝图进行射线检测

蓝图中搜索trace 选择你需要的节点
指定起始位置和结束位置
最后射线检测的结果会封装到HitResult结构体中

蓝图中进行射线检测

HitResult中的数据都很直观明了 ,简单介绍几个重要的

Time 从检测开始到碰到物体经过的时间
Distance 从射线起始到碰撞到物体之间的距离
Location 碰撞的物体的位置
Impact Point 碰撞点的位置
HitActor 碰撞到的Actor
Initial Overlap 是否一开始就在检测体积内(用于立方体检测、球体检测…)

二、示例

下图是从屏幕空间发射射线的示例 常见于第一人称游戏

射线检测示例

在射线碰撞的位置生成物体

射线检测生成物体

三、扩展
  • 球体检测、立方体检测、胶囊体检测
    与射线检测是一回事
    只是生成的东西变成了球体、立方体、胶囊体,
    然后从起点到终点发射,检测碰到的物体
    另外需要手动指定球体、立方体、胶囊体的大小
    使用它们检测整个空间中的物体

其他类型检测

  • 单目标检测与多目标(Multi)检测
    例如:

    • Line Trace By Channel :在射线路径上检测到 ‌首个Block该通道的物体‌ 后立即终止检测,返回碰到的物体
    • Multi Line Trace By Channel :穿透所有 ‌Overlap响应‌ 的物体,持续检测直至遇到 ‌首个Block响应‌ 的物体,并返回所有被穿透的Overlap对象及最终Block对象
  • HitResult处理
    Multi检测会返回多个物体,对于多个HitResult使用For Each Loop节点遍历

遍历HitResults

四、Trace Channel和Object Type

Line Trace By Channel和Line Trace for Objects的区别:
采用两种不同的通道过滤物体
只有物体的碰撞在对应的通道中才能被检测到

  1. 自定义通道:
    项目设置->Collision中可以自定义Trace Channel和Object Channel

自定义通道

下面还有引擎给你选好通道的一些预设,比如NoCollision,Pawn…

  1. 设置碰撞通道:
    在角色的碰撞体->Collision下设置物体对某个通道是否作出回应

配置物体碰撞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值