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

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

  • 相关阅读:
    Protobuf编码原理
    LVGL---基础对象的事件(events)
    Notebook系列第11期:基于POT工具API模式的模型量化方法
    安卓——图片加载工具(Glide封装版)
    UISwitch、UISegmentControl和UISlider
    Unity游戏Mod/插件制作教程04 - 如何创建配置文件
    DTD建模
    x64dbg 配置插件SDK开发环境
    Scala编程语言
    [Linux](5)gcc编译、gdb调试、make/makefile项目自动化构建工具、进度条小程序
  • 原文地址:https://blog.csdn.net/hgf1037882434/article/details/134083517