UE4中的Collision(碰撞)规则梳理
第一部分是碰撞一些小心得,新手可以直接看第二部分,希望能帮到你。
第二部分是基础知识。
第一部分
这里说下使用过程中发现的小点,
1.有些情况可能会让大家产生怀疑。比如这个节点·····
当你使用这个节点的时候,物体十有八九都是直接穿过去了,不管你怎么设置两者之间的碰撞关系!
这个节点是强制位移的,解决办法很简单。只需要勾选Sweep,并且保证Collision主体是根节点即可。
设置完成之后物体会正确的被Block物体挡住,不会再有穿墙现象。
如下:
2.项目如果有需求可以手动添加碰撞响应类型以及碰撞预设。在ProjectSetting的Engine栏下的Collision里面可以设置
3.精度问题,由于是检测是按照帧来的,所以当你速度够快或者正好卡在某个帧检测之间碰撞了,是会出现穿墙现象,可以另外写逻辑来判断解决,例如:绝地求生穿到地底或者墙里面的情况。
4.Projectile和物理材质碰撞检测问题,例如Projectile撞到了树检测不出树的物理材质,一直返回默认值。请在Projectile类碰撞设置里面勾选移动时返回物理材质
第二部分
一个巴掌拍不响,碰撞事件的产生一定是双方的,所以UE4中的碰撞问题其实也就是两个Object之间的响应设置问题。
UE4中给物体的碰撞响应规定了三种状态,分别是Ignore(忽略),Overlap(重叠),Block(阻挡)。字面意思其实很清楚了,基本规则是
1.如果两个物体至少有一个被设置成了Ignore,那么不会产生任何碰撞事件。
2.如果两个物体至少有一个被设置成了Overlap,并且不是Ignore那么会产生Overlap事件。
3.仅有两个物体都设置成Block,才会产生Hit事件。
下面这张图片很直观:
PS:Overlap或者Hit事件的生成一定要勾选对应的生成选项。否则不会有事件触发
另外不建议同时勾选Block和Overlap,逻辑上来讲,不会有物体既能处于Hit状态又可以重叠。
选项在这:
接下来我们需要解释下CollisionPreset(碰撞预设)了,这个是碰撞规则响应的核心部分。
分为四块,
第一个是碰撞方式,有四种
其中,
NoCollision无碰撞,字面意思。
QueryOnly,通常用在不需要进行物理模拟的情况,仅仅是发出“询问”---你撞到我了么?反馈状态,例如射线检测,扫描等。
PhysicsOnly,仅用于物理,需要物理模拟的情况,比如玩家骨骼,物理约束的情况。
CollisionEnable,Query和Physic都生效。
第二个是对象类型。
定义了当前物体的碰撞类别,是与其他物体碰撞的时候计算结果的依据。
第三栏和第四栏都是碰撞响应
定义了物体碰撞发生的时候,响应的规则。3是对射线的响应,4是对其他类型物体的响应。
这些具体的响应大家打开引擎应该都很清楚。