碰撞体必备属性
参与碰撞的物体必须包含的两个属性
-
通道Channel(可以理解为参与碰撞的物体本身类型)
-
Channel之间的Interact Type
Channel
默认情况下,与物体碰撞响应相关的Channel有六种分类:
-
WorldStatic-游戏中的静态对象,即不会以任何方式移动,如地形等。
-
WorldDynamic-除了下面4种之外的游戏内可移动物体。
-
Pawn-由玩家或者AI控制的角色。
-
PhysicsBody-所有可以被Simulate的Physics Body或者Object。
-
Vehicle-标记为Vehicle后,玩家的Pawn可以进入其中。
-
Destructible-任何可破坏的Actor,可使用Destructible Mesh Editor进行编辑。
Interact Type
-
Ignore-可穿透且无任何事件通知
-
Overlap-可穿透且有事件通知
-
Block-不可穿透且有事件通知
需要注意的是,两个或者多个物体碰撞的实际结果由两个物体的碰撞设置所共同决定。只要有一个物体将碰撞对象设置为Ignore,碰撞都不会触发任何事件或者物理现象。而碰撞的阻隔仅发生在二者彼此都Block时。如果二者互为Overlap和Block,则显示为Overlap。
一般不建议在一个物体上同时开启撞击和交叠事件。
自定义Channel和碰撞预设
在Edit->Project Settings->Engine->Collision中可以自定义Channel和碰撞预设
创建碰撞体
-
我们可以从外部导入Mesh的碰撞
-
在UE4中为导入的Mesh自动生成可用于游戏的碰撞体。这种自动生成的碰撞体分为两种,简单碰撞体和复杂碰撞体。
简单碰撞体
简单碰撞体的优点在于成本低、不易与角色互相卡住。
包括不限于以下几种:
-
Box
-
Sphere
-
Capsule
从左到到右依次显示
-
Convex Shape
Convex Shape为凸包体,其定义为形状内所有角度皆小于180°,
5.KDOP
KDOP(K Discrete Oriented Polytope,K-离散有向多面体)的简单碰撞体。
这种碰撞体会生成K组轴对称的平面,并将其形状尽可能地贴近所选的Mesh。
注意不同部分的碰撞盒之间需要留有空隙,以防止相交而导致的运行时表现错误。
复杂碰撞体
复杂碰撞体即该Mesh本身。
在StaticMesh编辑器的细节面板中,我们可以在Collision->Collision Complexity中对引擎生成碰撞体的复杂度进行设置,以便进行不同精度的碰撞查询。
Project Default-项目默认设置在Project Setting->Engine->Physics->Simulation中可以找到。
Simple And Complex-同时生成简单碰撞体和复杂碰撞体。简单碰撞体用于常规的场景查询和碰撞测试;复杂碰撞体用于复杂场景查询*。
Use Simple Collision As Complex-仅创建简单碰撞体,用于场景查询以及碰撞测试。
Use Complex Collision As Simple-仅创建复杂碰撞体,用于场景查询以及碰撞测试。但此时无法对其进行模拟。