• Unity的碰撞检测(二)


    温馨提示:本文基于前一篇“Unity的碰撞检测(一)”继续探讨Collider输出,阅读本文则默认已阅读前文。

    (一)测试说明

           对于Collider输出,我们首先应该保证两个游戏对象具备的是碰撞器而非触发器,所以碰撞器的IsTrigger属性必须为false。但是结合前文可知决定Trigger还是Collider输出的并不只有IsTrigger属性,对于影响两个游戏对象碰撞的因素除了碰撞器还有就是刚体,这是我们基于前文的结论所得知的。那么刚体中影响碰撞的属性有两个,分别是BodyTypeCollisionDetection

           本次测试我们约定如此:Player具备碰撞器,Enemy具备刚体,Enemy具备触发器或碰撞器,默认属性分别如图1和图2所示:

    图 1 碰撞器默认属性

    图 2 刚体默认属性

    (二)测试用例

    表 1 Enemy不同BodyType的测试用例

    Enemy的碰撞器是否为触发器

    用例序号

    Static

    Kinematic

    Dynamic

    ×

    A1

    ×

    ×

    A2

    ×

    ×

    A3

    ×

    ×

    B1

    ×

    ×

    B2

    ×

    ×

    B3

    ×

    ×

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

    测试结果序号

    用例序号

    控制台输出

    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的碰撞检测(三)”继续探讨吧。

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

  • 相关阅读:
    kubernetes 安全
    platformIO开发arduino
    Day 6 C++
    需求管理手册-需求工程的流程环节(4)
    mysql8多主多从复制搭建
    zemax双透镜公差分析
    对MVC三层架构的深入理解和对过滤器Filter的实战运用详解
    linux下的PPPOE设置
    web期末大作业 用HTML+CSS做一个漂亮简单的节日网页【传日文化节日中秋节】
    业务可视化-让你的流程图"Run"起来(6.定时任务&Spring-Batch的集成)
  • 原文地址:https://blog.csdn.net/hgf1037882434/article/details/134038166