Unity中3D物体和2D物体的碰撞、触发检测

一、添加组件

不论是2d还是3d的物体碰撞、触发检测之前,都要添加相应的组件collider,简单介绍几种比较常见的,Box Collider/Box Collider2D(箱式对撞机)、Capsule Collider/Capsule Collider2D(胶囊对撞机)、Sphere Collider/Sphere Collider2D(球形/圆形(2D)对撞机)、Mesh Collider/Mesh Collider2D(网格对撞机),
样式分别如下图:
1.箱式

2.胶囊

3.球形

4.网格
更多的可以参考:各种Collider的介绍

二、代码触发消息

首先需要自己定义谁是碰撞物体,谁是检测物体,两者都必须添加collider(我尝试了一下,可以添加不同种的collider),而且碰撞体还需要添加刚体rigidbody,其后在碰撞体上添加代码

//检测3D物体
private void OnTriggerEnter(Collider collision)
{
  //碰撞时触发的消息
  Debug.Log("碰撞到了"+collision.gameObject.name);
  }
  //检测2D物体
  private void OnTriggerEnter2D(Collider collision)
{
  //碰撞时触发的消息
  Debug.Log("碰撞到了"+collision.gameObject.name);
  }


还有方法OnTriggerExit/OnTriggerExit2D碰撞结束时触发,OnTriggerStay/OnTriggerStay2D持续碰撞时触发(碰撞体在触发体内时,持续触发)。在此之外还有另一种不同的方法OnCollisionEnter、OnCollisionExit、OnCollisionStay,依次是碰撞时触发、碰撞结束触发、持续碰撞时触发。
关于两者的区别,可以参考:Unity中OnTriggerEnter与OnCollisionEnter区别
在这里插入图片描述
如果我们把上面collider中的isTrigger勾选的话,那么这个物体就变成了一个触发器,触发器哟普什么不同呢,碰撞体与触发器相碰时,会触发事件,但是同样不像碰撞检测那样产生物理效应,碰撞体会直接穿过触发器。

三、一些小思考

如果是做2D物体的碰撞检测,最好是将检测器的collider的IsTrigger勾选上,让其变成一个触发器,否则由于原物体的rigibody刚体使得碰撞时原物体发生旋转,从而改变运动方向,同样如果非要用的话,可以将原物体的移动方式改变成由rigidbody所控制的方法,具体的话可以自行百度。

猜你喜欢

转载自blog.csdn.net/weixin_43257287/article/details/89145210