基本作用
Collider的基本作用就是阻止一个物体进入另一个物体。如果你没有给墙壁添加Collider,那么你就能穿过一堵墙。当然在Unity中,当你Create一个3D Object的时候,那个3D Object自动带有Collider。
为了加速渲染,Unity将Collider分为2大类,一类是位置不会变的Collider。另一类是位置会变的Collider。
因为位置不会变的Collider不会移动,所以我们只需要计算一次位置就可以了,这样就起到了加速的效果。我们把位置不会变的Collider称作静态Collider。
位置会变的Collider称作动态Collider,动态Collider又分为Rigidbody Collider和Kinematic Rigidbody Collider。
下面是我的学习笔记。
静态Collider
当你Create一个Cube时,我们可以看到Cube含有5个Component,其中与本文相关的只有Box Collider。
在组件结构上,只含有Collider但没有Rigidbody的GameObject是静态Collider。
静态Collider用于不移动的物体。接近的动态Collider会和静态Collider相撞,但是静态Collider不会被移动。如果接近的是静态Collider,则不会相撞。(见本文结尾部分表格)
静态Collider不仅不应该移动,而且不应该在游戏中被取消或者设置。如果你违反了这些规则,那么会带来明显的性能损耗。
Rigidbody Collider
一个既含有Collider又有Rigidbody(其中没有勾选Is Kinematic)的GameObject被称作Rigidbody。Rigidbody Collider用于移动的物体,受力的影响。比如在一场爆炸中,如果一个人被设置为Rigidbody Collider,那么这个人就会被炸飞。
Kinematic Rigidbody Collider
如果你既想改变一个物体的位置,又希望这个物体不受力的影响,只受脚本的控制。比如说,一个超能力的人,不受爆炸的影响,可以站在原地丝毫不动。那么,就在GameObject中同时添加Collider和Rigidbody,并勾选Rigidbody中Is Kinematic选项。
Trigger
Collider的作用除了碰撞之外,还可以检测一个动态Collider是否进入了一个区域,比如想让你的角色在进入一个房间的角落的时候,一只蜘蛛会从天花板上挂下来,那么你可以放一个Cube在那个角落,同时勾选Is Trigger选项。勾选了Trigger选项之后,其他的Collider就不会和它碰撞,而可以进入这个Collider,并触发OnTriggerEnter()等函数,于是我们可以在OnTriggerEnter函数中设置蜘蛛的行为。
碰撞效果矩阵
一个通用的规则是没有添加Rigidbody组件的对象不会受物理效果影响(不会碰撞、不会触发trigger效果)。
Collision detection occurs and messages are sent upon collision
- | Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider |
---|---|---|---|---|---|---|
Static Collider | Y | |||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | |||||
Static Trigger Collider | ||||||
Rigidbody Trigger Collider | ||||||
Kinematic Rigidbody Trigger Collider |
Trigger messages are sent upon collision
- | Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider |
---|---|---|---|---|---|---|
Static Collider | Y | Y | ||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | Y | Y | |||
Static Trigger Collider | Y | Y | Y | Y | ||
Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
Kinematic Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |