这是我参与8月更文挑战的第22天,活动详情查看: 8月更文挑战
上一篇文章《 Unity 基础 之 物体系统 -- 碰撞体属性介绍 》,对各种常用碰撞体的属性面板进行了介绍,这篇文章我么一起来看看如何使用这碰撞体吧。
碰撞体概念
碰撞体 (Collider) 组件定义对象的形状以便用于物理碰撞。碰撞体是不可见的,其形状不需要与对象的网格完全相同,事实上,粗略近似方法通常更有效,在游戏运行过程中难以察觉。
碰撞与触发
本质区别:碰撞体组件是否勾选
Is Trigger
属性:
也就是两个都不勾选
Is Trigger
属性的碰撞体距离较近时(生活中的接触,挨着),那么此时两个物体将会发生碰撞。举例:球掉到地上,会被弹起来,这就是两个碰撞体进行了碰撞体产生了相互作用力,在Unity中也是这样的,两个向装的物体会产生相互作用力,而分开
若有一个勾选了
Is Trigger
属性,那么此时两个物体将不会产生碰撞,常见的穿模。举例:绝地求生游戏中的汽车撞到小树会直接过去,像没有这棵树一样。
代码触发条件
Unity 为我们提供了检测触发和碰撞的代码,他们分别是:
以上六个函数,还有与其一一对应的2D碰撞体函数,在函数名后加上2D,则可监听2D碰撞体触发。
碰撞函数自动执行条件:
触发函数自动执行条件:
代码示例:
public class ColliderTest : MonoBehaviour
// --------------碰撞器--------------
private void OnCollisionEnter(Collision collision)
Debug.Log("碰撞器 OnCollisionEnter ");
private void OnCollisionStay(Collision collision)
Debug.Log("碰撞器 OnCollisionStay ");
private void OnCollisionExit(Collision collision)
Debug.Log("碰撞器 OnCollisionExit ");
// --------------触发器--------------
// 勾选isTrgger
private void OnTriggerEnter(Collider other)
Debug.Log("触发器 OnTriggerEnter ");
private void OnTriggerStay(Collider other)
Debug.Log("触发器 OnTriggerStay ");
private void OnTriggerExit(Collider other)
Debug.Log("触发器 OnTriggerExit ");
复制代码