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

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

  • 相关阅读:
    .NET App 与Windows系统媒体控制(SMTC)交互
    【Rust 日报】2022-09-04 Rust基金会招募
    如何深入学习Java并发编程?
    【美团3.18校招真题2】
    电脑照片如何打包发送微信?三种方法随心选!
    python
    使用百度EasyDL实现新闻资讯自动分类
    【MM32F5270开发板试用】六、如何用 星辰内核 + 国产RTOS 通过I2S播放 “星辰大海”
    python实现一个简单的桌面倒计时小程序
    基于Python实现的图的同构算法
  • 原文地址:https://blog.csdn.net/hgf1037882434/article/details/134083517