Unity-Rigidbody【刚体】组件-Collision Detection碰撞检测模式

本文资料参考于:贴吧某位大佬对碰撞检测的分析http://tieba.baidu.com/p/2741418294

Unity-Rigidbody【刚体】组件-Collision Detection碰撞检测模式_第1张图片

所谓Collision Detection,顾名思义就是碰撞检测。

然而有时候开发游戏,对于高速运动的物体(比如:子弹/大炮,或者很高处自由落体的物体),即使再三确认加了Rigidbody组件,检查了碰撞检测的代码完全没有错误,但仍然会出现 物体直接穿过另一个物体 的问题, 则说明这个碰撞检测的程序对于高速运动的物体而言会出错。

Unity物体的Rigidbody组件提供了一个Collision Detection的属性,该属性用于更改物体的碰撞检测模式————一共有三种模式可以选择(选择你想要的模式,底层碰撞检测的算法均有差别)

Unity-Rigidbody【刚体】组件-Collision Detection碰撞检测模式_第2张图片

(解释一下,上图每个箭头两端均指的是两个即将碰撞的物体的Collision Detection属性的值,箭头中间的属性值所指的是这两个物体时间碰撞所用的碰撞检测模式)


Discrete(离散型检测模式)就是普通的默认状态;

Continuous(连续检测)则是更加精细的碰撞检测,但是很耗资源;在这种状态下,当这个刚体与其他普通刚体碰撞时,仍将使用Discrete的碰撞检测,但是与没有刚体的Mesh Collider碰撞时就会连续检测了。

Continuous dynamic(动态连续检测)则是对没有刚体的Mesh Collider或是对处在Continuous或是Continuous Dynamic状态下的刚体使用连续碰撞检测,对其他的刚体使用普通的Discrete检测。

但是!!!必须得注意的是:

1.Continuous/Continuous dynamic(连续检测)--对物理性能有很大的影响,所以如果高速运动的物体的碰撞没有问题,应该设置为默认的 Discrete

2.Continuous/Continuous dynamic -- 只支持使用Box,Sphere和Capusle碰撞器的刚体。(这一点是在以往网上的资料上发现的,查了Unity2017最新版手册,发现确实有说到Continuous支持Box,Sphere和Capusle)


对于脚本中动态添加Rigidbody组件,可以通过以下代码对物体的碰撞模式进行修改:

rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;//普通离散
rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;//连续
rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;//动态连续

总结:

Discrete适用于大部分刚体

Continuous适用于将有可能会被高速移动物体撞上的物体

Continuous Dynamic适用于高速移动的物体


使用连续碰撞检测(ContinuousContinuous Dynamic)前提:

刚体和刚体:    刚体的碰撞器必须是Box,Sphere,Capusle.

刚体和非刚体(静态碰撞器):    刚体物体的碰撞器必须是Box,Sphere,Capusle,非刚体物体的碰撞器必须是Mesh。




  

你可能感兴趣的:(Unity的小组件)