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 Hit Actor Hit Component Hit Bone Name 产生碰撞的骨骼名(与 Skeletal Mesh 产生碰撞时有效) Hit Item 产生碰撞的 Primitive Item(这个应该是偏 Primitive 细节的内容,目前不太熟悉,后面看看能不能补充一下) Face Index 产生碰撞的三角面索引(与 三角面网格 或 地形 产生碰撞时有效) 相关资料