碰撞几何体是不可见的,游戏中对象形状的简化版本。通过使用碰撞形状而不是网格的图形多边形,当对象相互碰撞时执行的计算变得非常简单。
1.简单碰撞
简单碰撞用于交互对象,如玩家撞在椅子上这类交互表现
球体碰撞
球体碰撞只能应用于规则多边形球体(半径不变,不是卵形或卵形)。
胶囊体碰撞
胶囊体碰撞必须只由一个圆柱体组成,即使从物理反应的角度来看,它的行为仍然像它的末端是圆的一样。圆柱体必须至少有7个侧面才能被识别为碰撞胶囊。
Box碰撞
盒子碰撞有六条边,它们只以90度角相交。如果在顶点级别编辑,这些角度很容易变得倾斜,因此请确保正确设置了长方体碰撞形状。
凸面碰撞
凸起的形状没有凹痕或凹陷。请注意,前面的三个类别也可以这样描述。
网格碰撞
网格形状用于具有凹痕、孔或突起的任何其他类型的形状。
制作简单碰撞时应注意简化碰撞形态。比如说游戏中一般玩家碰不到的树干顶部。树干碰撞一般做到3-4m高即可。如果有高层建筑玩家上不去,对于高层建筑部分直接套一个box即可
2.复杂碰撞
复杂碰撞用于射击子弹这类精细化交互的类型。
ue4碰撞命名 (碰撞命名很重要)
UBX_[RenderMeshName]_##
盒体 必须使用常规的矩形3D对象来创建。你无法移动顶点或使其改变形状,使其变为矩形棱柱之外的其它形状,否则其将无法正常使用。
有一次不小心将使用的UCX碰撞修改成了UBX碰撞,在ue4引擎中对模型进行缩放时发现ubx碰撞跟模型缩放数值成反比。
UCP_[RenderMeshName]_##
胶囊体 是两端半圆的圆柱体对象。胶囊体完全不需要过多分段(8段为佳),因为它将被转换为一个真正的胶囊体进行碰撞。和盒体一样,不能对单个顶点进行移动。
USP_[RenderMeshName]_##
球体 没有必要设置过多分段(8段为佳),因为它将被转换为一个真正的球体进行碰撞。和盒体一样,不能对单个顶点进行移动。
UCX_[RenderMeshName]_##
凸 对象可以是任何完全封闭的凸型3D形状。例如,一个盒体也是一个凸对象。下图说明了哪些是凸对象,哪些不是。
其中uxc碰撞是目前ue4中使用比较频繁的一种碰撞类型
制作时注意事项
-
RenderMeshName
名称必须与3D软件中碰撞网格体关联的渲染网格体的命名一致。如果3D软件中渲染网格体的命名为Tree_01
,那么碰撞网格体将与渲染网格体处于同一场景中,命名为UCX_Tree_01
,之后其将随渲染网格体导出到同一个FBX文件中。如果需要为一个网格体设置多个碰撞对象,可以使用额外的辨识符对其命名进行扩展,如:UCX_Tree_01_00
、UCX_Tree_01_01
、UCX_Tree_01_02
,以此类推。这些碰撞对象均会和此网格体相关联。 -
当前球体仅应用于钢体碰撞和虚幻引擎的零范围追踪(如武器),而不应用于非零范围追踪(如玩家运动)。如 静态网格体 并非等分缩放,则球体和盒体将无法正常使用。通常需要创建 UCX 基元。
-
碰撞对象设置完毕后,便可以把渲染和碰撞网格体导出到同一个FBX文件中。将FBX文件导入虚幻编辑器时,它将找到碰撞网格体,将其从渲染网格体上移除,并将其转换为碰撞模型。
-
将非凸面网格体分解为凸面基元是非常复杂的操作,还可能产生不可预知的效果。另一个方法是在3D MAX或Maya中将碰撞模型分解为凸面块。
-
如一个对象的碰撞由多个凸包所定义,那么这些凸包相互未交叉时产生的结果为最佳。举例而言,如果一个棒棒糖的碰撞由两个凸包所定义(一个用于糖果、另一个用于棒),那么两者之间应留有空隙。详情如下所示:
模型
模型碰撞
https://docs.unrealengine.com/4.27/zh-CN/WorkingWithContent/Importing/FBX/StaticMeshes/