Unity的碰撞检测(六)

温馨提示:本文基于前一篇“Unity的碰撞检测(五)”继续探讨两个游戏对象具备刚体的BodyType均为Dynamic,但是Collision Detection属性不同的碰撞检测,阅读本文则默认已阅读前文。

(一)测试说明

       在基于两个游戏对象都具备碰撞器和刚体的前提下,如果碰撞器属性一致,而一个游戏对象的刚体的BodyType为Dynamic,另一个为Kinematic,除了Collision Detection属性不一致,其它属性保持一致,那么会对碰撞检测产生什么影响?

       本次测试我们约定如此:Player与Enemy都具备碰撞器和刚体,Player的刚体的BodyType为Dynamic,而Enemy的刚体的BodyType为Kinematic,且仅Player进行高速碰撞,默认属性如图1和图2所示:

图 1 碰撞器默认属性
图 2 刚体默认属性

(二)测试用例

表 1 Player和Enemy的刚体的Collision Detection测试用例

游戏对象

测试用例序号

Discrete

Continuous

是否高速碰撞

Player

A1

×

A2

×

Enemy

B1

×

×

B2

×

×

表 2 测试用例的控制台输出

组合序号

测试用例组合

测试结果

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碰撞检测系列文章的总结篇,将对所有结论进行总结。

如果这篇文章对你有帮助,请给作者点个赞吧!  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值