UE4 微笔记 之 HitResult (持续更新)

69 篇文章 5 订阅

UE4 中使用 FHitResult 结构来存储碰撞检测后的相关数据,在此简单记录一下该结构中各个成员的含义(本文仅记录了一般情况下 FHitResult 各结构成员的含义,如果需要深入了解,建议直接参考源码).

FHitResult 结构对应于蓝图中有一个 Break Hit Result 节点,我们可以参照该节点来了解 FHitResult 中各个成员数据(为了便于理解,下面记录的成员数据顺序有所调整):

在这里插入图片描述

Blocking Hit
  • 如果发生了碰撞则为 true, 否则为 false
Initial Overlap
  • 用于表示碰撞检测起始处是否与碰撞体发生了重叠, 发生了重叠为 true, 否则为 false, 简单理解就是在碰撞检测的起始点是否一开始就发生了碰撞(如果发生了 Initial Overlap, 那么 FHitResult 中一些成员数据的含义会有所变化,更多细节可以参考相关资料作进一步了解)
Trace Start
  • 碰撞检测的起点位置
Trace End
  • 碰撞检测的终点位置
Location
  • 碰撞发生的位置点,值得注意的是,如果是扫掠(Sweep)(碰撞)检测的话, Location 的位置是使扫掠体形状(Shape)不与碰撞体发生穿透的位置(位于 Trace StartTrace End 这条线段上)
Impact Point
  • 碰撞发生的接触点,一眼望去似乎和上面的 Location 没什么区别,但我们简单看个示例就可以明白两者的不同之处了(图片来自于这里):

在这里插入图片描述

图中的蓝色点即为 Location, 而黄色点则为 Impact Point

Distance
  • Trace StartLocation 的距离
Time
  • 碰撞发生的(标准化)“时间”,用下面的公式就可以简单理解了(其中 WholeDistanceTrace StartTrace End 的距离, Distance 如前所述,为 Trace StartLocation 的距离):

T i m e = D i s t a n c e / W h o l e D i s t a n c e Time = Distance / WholeDistance Time=Distance/WholeDistance

举个简单的例子(图片来自于这里)

在这里插入图片描述

图中 HitResult 的 Time 数值即为 0.3

Impact Normal
  • 碰撞接触点的法线方向(即 Impact Point 处的法线方向)

还是拿之前的示意图举例(图片来自于这里)

在这里插入图片描述

其中的黄色箭头即为 Impact Normal

Normal

代码处理上 NormalImpact Normal 有一些区别处理,可以理解为 Normal 为原始的碰撞法线方向, Impact Normal 则做了进一步的处理(针对一些特定类型的碰撞检测),简单理解的话可以认为 NormalImpact Normal 基本相同.

想进一步了解细节的朋友建议参考源码

Phys Mat
  • Impact Point 处的物理材质
Hit Actor
  • 产生碰撞的 Actor
Hit Component
  • 产生碰撞的 Component
Hit Bone Name
  • 产生碰撞的骨骼名(与 Skeletal Mesh 产生碰撞时有效)
Hit Item
  • 产生碰撞的自定义数据,譬如对于 UDestructibleComponent 而言, Item 数据即表示其内部的 Chunk(fractured piece) 索引
Face Index
  • 产生碰撞的三角面索引(与 三角面网格 或 地形 产生碰撞时有效)
相关资料
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值