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 Start 到 Trace End 这条线段上)
Impact Point
- 碰撞发生的接触点,一眼望去似乎和上面的 Location 没什么区别,但我们简单看个示例就可以明白两者的不同之处了(图片来自于这里):
图中的蓝色点即为 Location, 而黄色点则为 Impact Point
Distance
- Trace Start 到 Location 的距离
Time
- 碰撞发生的(标准化)“时间”,用下面的公式就可以简单理解了(其中 WholeDistance 为 Trace Start 到 Trace End 的距离, Distance 如前所述,为 Trace Start 到 Location 的距离):Time=Distance/WholeDistance
举个简单的例子(图片来自于这里)
图中 HitResult 的 Time 数值即为 0.3
Impact Normal
- 碰撞接触点的法线方向(即 Impact Point 处的法线方向)
还是拿之前的示意图举例(图片来自于这里)
其中的黄色箭头即为 Impact Normal
Normal
- 对于 Trace 检测(LineTrace, SweepTrace)而言, Normal 和 Impact Normal 应该是一致的;在物体(Object)之间的碰撞结果中, Normal 和 Impact 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光線投射使用心得