温馨提示:本文基于前一篇“Unity的碰撞检测(一)”继续探讨Collider输出,阅读本文则默认已阅读前文。
(一)测试说明
对于Collider输出,我们首先应该保证两个游戏对象具备的是碰撞器而非触发器,所以碰撞器的IsTrigger属性必须为false。但是结合前文可知决定Trigger还是Collider输出的并不只有IsTrigger属性,对于影响两个游戏对象碰撞的因素除了碰撞器还有就是刚体,这是我们基于前文的结论所得知的。那么刚体中影响碰撞的属性有两个,分别是BodyType和CollisionDetection。
本次测试我们约定如此:Player具备碰撞器,Enemy具备刚体,Enemy具备触发器或碰撞器,默认属性分别如图1和图2所示:
(二)测试用例
Enemy的碰撞器是否为触发器 | 用例序号 | Static | Kinematic | Dynamic |
× | A1 | √ | × | × |
A2 | × | √ | × | |
A3 | × | × | √ | |
√ | B1 | √ | × | × |
B2 | × | √ | × | |
B3 | × | × | √ |
测试结果序号 | 用例序号 | 控制台输出 |
R1 | A1 | 无 |
R2 | A2 | 无 |
R3 | A3 | Collider输出 |
R4 | B1 | 无 |
R5 | B2 | Trigger输出 |
R6 | B3 | Trigger输出 |
(三)测试总结
分析1:由R1-R3可知刚体的BodyType属性为Dynamic才会出现Collider输出。
分析2:由R4-R5可知刚体的BodyType属性为Kinematic或Dynamic才会出现Trigger输出。
结合上述分析和前文的结论可得:
(1)有效触发或碰撞的共有必要条件如下:
结论1:两个游戏对象至少有一个具备刚体。
(2)有效触发的特有必要条件如下:
结论2:两个游戏对象必须有至少一个触发器。
结论3:刚体的BodyType属性为Kinematic或Dynamic。
(3)有效碰撞的特有必要条件如下:
结论4:两个游戏对象必须有至少一个碰撞器。
结论5:刚体的BodyType属性为Dynamic。
(四)问题
本文我们的测试是基于Player具备碰撞器,Enemy具备刚体,Enemy具备触发器或碰撞器。这是基于仅一个游戏对象具备刚体的前提,如果两个游戏对象都具备刚体是否会因为各自的BodyType属性不同而产生不同的结果呢?我们在下一篇“Unity的碰撞检测(三)”继续探讨吧。
如果这篇文章对你有帮助,请给作者点个赞吧!