论Collision Detection的作用

论Collision Detection的作用

今天有空就仔细研究了一下Collision Detection的问题,以前总是弄不明白Continuous和Continuous Dynamic到底有什么区别,今天算是彻底弄明白了,官方文档说的太晦涩了不太容易解释.于是我自己做了一张图,各位基本上一看就懂,

论Collision Detection的作用

需要知道的唯一一点就是Continuous类型的检测比Discrete更加消耗性能.

官方文档的原文,不便于理解更不便于记忆.

我的理解如下:
Continuous---对Discrete以及Continuous类的刚体使用Discrete检测(但除了Continuous Dynamic,因为Continuous Dynamic只对Discrete的刚体使用Discrete检测,那么就会对Continuous使用Continuous检测,反之亦然.) 除此之外还对静态物体使用Continuous检测
Continuous Dynamic---只对Discrete的刚体使用Discrete检测,对其他任何刚体或者静态物体都使用Continuous检测.
要点:Continuous和Continuous Dynamic都会对静态物体使用Continuous检测.
在使用的时候,一般对高速运动的刚体使用Continuous Dynamic,这时只需要记住,要将其他的刚体设置为非Discrete才会让高速运动的物体以及其他刚体之间产生Continuous检测,可以将其他刚体设置为Continuous或者Continuous Dynamic,但是不会进行高速运动的其他物体不必设置为Continuous Dynamic,因为Continuous Dynamic比Continuous更消耗性能.

怎么样是不是很繁琐,如果非要用一句话来概括重要知识点,那么就是下面这句:
Continuous和Continuous Dynamic的区别在于对Continuous使用何种检测,Continuous使用Discrete,而Continuous Dynamic使用Continuous!

另外贴一个很多人都会遗漏的重要知识点,这个知识点是我在API文档里面找到的,也就是User Manual和Component Reference里面是没有这句话的,请各位记住: Continuous Collision Detection is only supported for Rigidbodies with Sphere-, Capusle- or BoxColliders!!! 也就是说,如果你的Collider不是自带的球形或者立方体或者胶囊Collider的话,你无论设置成什么都只会使用Discrete检测!

这段话在Unity4.x从入门到精通中也是是有翻译的:
CollisionDetection:碰撞检测
该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞,有三项可供选择
Discrete:离散碰撞器。该模式与场景中其他的所有碰撞体进行碰撞检测。该项为默认值。
Continuous:连续碰撞检测。该模式用于检测与动态碰撞体(带有Rididbody)的碰撞,使用连续碰撞检测模式来检测与网格碰撞体(不带ridigbody)碰撞。(添加一句原文翻译漏了),Rigidbody设置为连续动态碰撞检测模式将使用连续碰撞来检测。其他刚体会采用离散碰撞模式。此模式适用于那些需要与采用连续动态检测的对象相碰撞的对象。这对物理性能会有很大影响,如果不需要对快速运动对象进行碰撞检测,就使用离散碰撞检测模式。
Continuous Dynamic:连续动态碰撞检测模式,该模式用于检测与采用连续碰撞撞模式或连续
动态碰撞模式对象的碰撞,也可用于检测没有rigidbody的静态网格碰撞体。对于与之碰撞的其他对象可采用离散碰撞检测。动态连续碰撞检测模式也可用于检测快速运动的游戏物体。
翻译就是这样的理解并不难:后面两项就是为了用来能够检测到快速运动的物体不至于
你的void OnCollisionEnter(Collision hit)函数检测不到,而至于一个为Continuous Dynamic的刚体和一个Discrete的刚体碰撞,前者会使用使用Continous(连续)碰撞,后者离散碰撞.

说了这么多,其实还是不是很好理解,这里我说下自己的个人理解

可能发生碰撞的高速对象,选择连续动态模式
可能与高速对象碰撞的对象,选择连续模式
其他的选择离散模式

上一篇:Macbook air M1配置Vscode C++环境


下一篇:link