温馨提示:本文基于前一篇“Unity的碰撞检测(五)”继续探讨两个游戏对象具备刚体的BodyType均为Dynamic,但是Collision Detection属性不同的碰撞检测,阅读本文则默认已阅读前文。
(一)测试说明
在基于两个游戏对象都具备碰撞器和刚体的前提下,如果碰撞器属性一致,而一个游戏对象的刚体的BodyType为Dynamic,另一个为Kinematic,除了Collision Detection属性不一致,其它属性保持一致,那么会对碰撞检测产生什么影响?
本次测试我们约定如此:Player与Enemy都具备碰撞器和刚体,Player的刚体的BodyType为Dynamic,而Enemy的刚体的BodyType为Kinematic,且仅Player进行高速碰撞,默认属性如图1和图2所示:
(二)测试用例
游戏对象 | 测试用例序号 | Discrete | Continuous | 是否高速碰撞 |
Player | A1 | √ | × | √ |
A2 | × | √ | √ | |
Enemy | B1 | √ | × | × |
B2 | × | √ | × |
组合序号 | 测试用例组合 | 测试结果 |
G1 | A1、B1 | 1.碰撞穿透无Collider输出 2.Collider输出无碰撞穿透 3.Collider输出且碰撞穿透 |
G2 | A1、B2 | Collider输出无碰撞穿透 |
G3 | A2、B1 | Collider输出无碰撞穿透 |
G4 | A2、B2 | Collider输出无碰撞穿透 |
(三)测试总结
分析1:由G1可知,当Player和Enemy的刚体的Collision Detection均为Discrete时,高速碰撞产生的碰撞检测结果不稳定。
分析2:由G2-G4可知,当Player或Enemy的刚体的Collision Detection为Continous时,高速碰撞始终产生Collider输出且无碰撞穿透。
由以上分析可得以下结论:
结论1:两个游戏对象在发生有效碰撞的前提下,要能够正确进行碰撞检测和避免碰撞穿透则至少有一个游戏对象的刚体的Collision Detection为Continous。
(四)问题
本文所得到的结论与前文一致,但是二者的测试条件有所不同,前文基于两个游戏对象的刚体的BodyType均为Dynamic,而本文则是一个游戏对象的刚体的BodyType为Dynamic,另一个为Kinematic。下一篇为Unity碰撞检测系列文章的总结篇,将对所有结论进行总结。
如果这篇文章对你有帮助,请给作者点个赞吧!