Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解

什么是碰撞器?

描述了物体可被碰撞的边界,以及碰撞过程中相互影响效果。
碰撞效果:
两个游戏对象碰在一起,通过物理引擎产生类似现实的效果

碰撞器的种类:

1、盒碰撞器(Box Collider)
2、椭圆碰撞器(Sphere Collider)
3、胶囊碰撞器(Capsule Collider)
4、车轮碰撞器(Wheel Collider)专用于车辆
5、网格碰撞器(Mesh Collider)
6、地形碰撞器(Terrain Collider)

1、盒碰撞器(Box Collider)
盒子碰撞器是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可以做门,墙等

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第1张图片
Paste_Image.png

2、椭圆碰撞器(Sphere Collider)

椭圆碰撞器是一个基本球形的基本碰撞体,球形碰撞体的三维大小可以均匀的调节,适用于落石,球形障碍物

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第2张图片
Paste_Image.png

3、胶囊碰撞器(Capsule Collider)
是由一个圆柱体和与其相连的两个半球体组成

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第3张图片
Paste_Image.png

4、车轮碰撞器(Wheel Collider)
是一种针对地面车辆的特殊碰撞体,有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第4张图片
Paste_Image.png

5、网格碰撞器(Mesh Collider)
通过获取网格对象并在其基础上构建碰撞碰撞。更加精细,但是会使用更多系统资源。开启Convex参数的网格碰撞体才可以与其他网格碰撞体发生碰撞

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第5张图片
Paste_Image.png

通常两个网格碰撞体之间不会发生碰撞,但是它们都可以与基本碰撞体发生碰撞如果要让它发生碰撞:开启Convex属性

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第6张图片
Paste_Image.png

1.碰撞的方法

****球跟胶囊的代码****

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第7张图片
球的代码
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第8张图片
胶囊的代码

****情形一****
当两个游戏对象拥有刚体和碰撞器,不管脚本挂哪个游戏对象都可以进入Oncollision,两者都挂在碰撞器脚本都会调用各自身脚本上的OnCollision方法。

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第9张图片
Paste_Image.png
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第10张图片
Paste_Image.png

****情形二****
碰撞体球带有刚体,有碰撞器,有脚本,一开始就会进入自身的碰撞器方法打印与地面的接触。
被碰撞物胶囊有碰撞器,有脚本,但是没有刚体,一开始不会进入自身的碰撞器方法。
当两个物体发生碰撞,两者脚本中的碰撞器方法都会被触发打印

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第11张图片
Paste_Image.png

打印结果为:
首先一开始发现只有有刚体的球打印了自己的碰撞器方法


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第12张图片
Paste_Image.png

当球碰到胶囊的时候两者都触发打印


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第13张图片
Paste_Image.png

****情形三****
碰撞体球带有刚体,有碰撞器,有脚本,一开始就会进入自身的碰撞器方法打印与地面的接触。
被碰撞物有脚本,没有刚体(有刚体也是一样)跟碰撞器,不会打印任何方法

一开始打印:


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第14张图片
Paste_Image.png

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第15张图片
Paste_Image.png
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第16张图片
Paste_Image.png

二者相碰,拥有刚体与碰撞器并且身上有碰撞器方法的小球遇到没有碰撞器的胶囊(不管有没有刚体都一样1)会直接穿过去。


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第17张图片
Paste_Image.png

****情形四****
球与胶囊都只有碰撞器跟脚本,没有刚体

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第18张图片
Paste_Image.png
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第19张图片
Paste_Image.png

打印结果:
当两者没有刚体而只有碰撞的时候,两者是不会发生碰撞的,互相穿过。
因此二者都没有打印结果,是空的


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第20张图片
Paste_Image.png

最终结论:

1、只要有刚体有碰撞器,并且与其他碰撞器碰撞就会进入自身的碰撞器方法2、没有刚体,有碰撞器的物体被一个拥有刚体的碰撞器碰撞,都会调用自身的碰撞器方法。3、没有刚体的两个碰撞器相撞不会调用任何碰撞器方法
最终结论:
碰撞器(Collider)不需要刚体(Rigidbody)
刚体(Rigidbody)要发生碰撞,一定需要碰撞器(Collider)
碰撞器决定了碰撞发生时的边界条件
刚体决定了碰撞发生后的物体的运动效果
没有碰撞器的刚体,会在物理模拟中相互穿透。

2、触发器的方法

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第21张图片
Paste_Image.png
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第22张图片
Paste_Image.png

****情形一****
1、当两方带有触发器跟脚本,没有刚体的时候,二者不会打印触发器方法


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第23张图片
Paste_Image.png

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第24张图片
Paste_Image.png

2、其中一方是触发器,另一方是碰撞器,二者也不会打印触发器方法,都不会打印东西。

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第25张图片
Paste_Image.png

一样不会打印东西


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第26张图片
Paste_Image.png

****情形二****
给球添加一个刚体,且是个触发器的时候,球会直接与地面产生交互,穿透地面,并打印触发方法。

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第27张图片
Paste_Image.png

打印触发方法:

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第28张图片
Paste_Image.png

****情形三****
给球的刚体勾上Is kinematic


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第29张图片
Paste_Image.png

此时当球与方块碰撞的时候,当球与方块会打印各自的触发器方法。

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第30张图片
Paste_Image.png

****情形四****
当球与方块都有刚体和触发器和脚本的时候,二者都会调用触发方法


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第31张图片
Paste_Image.png
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第32张图片
Paste_Image.png

打印结果:


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第33张图片
Paste_Image.png

****情形五****
只要一方是触发器,另一方是有碰撞体就会触发各自的触发器方法


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第34张图片

打印结果:


Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解_第35张图片
Paste_Image.png

结论:

1、想要打印触发器方法,必须有一方是触发器,必须有一方带有刚体。二者缺一不可。
2、双方都是触发器,或者其中一方是触发器,另一方是碰撞器,都不会打印。
3、只要一方是触发器,并且有刚体组件,不管另一方是碰撞体还是触发器都会打印各自的触发器方法。
4、一般我们将触发器方法写在角色碰到的物体上,角色一般不参与触发方法。只写碰撞方法。

你可能感兴趣的:(Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解)