这是我参与8月更文挑战的第22天,活动详情查看: 8月更文挑战

上一篇文章《 Unity 基础 之 物体系统 -- 碰撞体属性介绍 》,对各种常用碰撞体的属性面板进行了介绍,这篇文章我么一起来看看如何使用这碰撞体吧。

碰撞体概念

碰撞体 (Collider) 组件定义对象的形状以便用于物理碰撞。碰撞体是不可见的,其形状不需要与对象的网格完全相同,事实上,粗略近似方法通常更有效,在游戏运行过程中难以察觉。

碰撞与触发

本质区别:碰撞体组件是否勾选 Is Trigger 属性:

也就是两个都不勾选 Is Trigger 属性的碰撞体距离较近时(生活中的接触,挨着),那么此时两个物体将会发生碰撞。举例:球掉到地上,会被弹起来,这就是两个碰撞体进行了碰撞体产生了相互作用力,在Unity中也是这样的,两个向装的物体会产生相互作用力,而分开

若有一个勾选了 Is Trigger 属性,那么此时两个物体将不会产生碰撞,常见的穿模。举例:绝地求生游戏中的汽车撞到小树会直接过去,像没有这棵树一样。

代码触发条件

Unity 为我们提供了检测触发和碰撞的代码,他们分别是:

  • 触发信息检测:
  • OnTriggerEnter(Collider other) 当进入触发器
  • OnTriggerExit(Collider other) 当退出触发器
  • OnTriggerStay(Collider other) 当逗留触发器
  • 碰撞信息检测:
  • OnCollisionEnter(Collision collisionInfo) 当进入碰撞器
  • OnCollisionExit(Collision collisionInfo) 当退出碰撞器
  • OnCollisionStay(Collision collisionInfo) 当逗留碰撞器
  • 以上六个函数,还有与其一一对应的2D碰撞体函数,在函数名后加上2D,则可监听2D碰撞体触发。

    碰撞函数自动执行条件:

  • 两个物体都有Collider
  • 至少有一个物体身上挂载Rigidbody
  • 两个物体都没有勾选Is Trigger
  • 触发函数自动执行条件:

  • 两个物体都有Collider
  • 至少有一个物体身上挂载Rigidbody
  • 至少有一个Is Trigger
  • 代码示例:

    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 ");
    复制代码
    分类:
    前端
  •