UE4 微笔记 之 HitResult

2021-09-10 10:49:41 浏览数 (2)

UE4 中使用 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 的距离):Time=Distance/WholeDistance

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

图中 HitResult 的 Time 数值即为 0.3

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

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

其中的黄色箭头即为 Impact Normal

Normal
  • 对于 Trace 检测(LineTrace, SweepTrace)而言, NormalImpact Normal 应该是一致的;在物体(Object)之间的碰撞结果中, NormalImpact Normal 的方向不同, Normal 的方向为目标物体的中心位置指向碰撞物体的中心位置.

说的有些抽象,还是来举个例子(图片来自于这里):

如果图中红色的胶囊是物体的话(并且其正在撞向绿色正方体),那么 Normal 的方向为从绿色正方体的中心点指向红色胶囊体的中心点(蓝色方块点)

Phys Mat
  • Impact Point 处的物理材质
Hit Actor
  • 产生碰撞的 Actor
Hit Component
  • 产生碰撞的 Component
Hit Bone Name
  • 产生碰撞的骨骼名(与 Skeletal Mesh 产生碰撞时有效)
Hit Item
  • 产生碰撞的 Primitive Item(这个应该是偏 Primitive 细节的内容,目前不太熟悉,后面看看能不能补充一下)
Face Index
  • 产生碰撞的三角面索引(与 三角面网格 或 地形 产生碰撞时有效)
相关资料
  • Break Hit Result explained
  • Break Hit Result
  • Trace光線投射使用心得

0 人点赞