产生碰撞的条件
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器
- 刚体可以让物体在物理影响下运动。
- 碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
碰撞检测
Unity中检测碰撞的方法有两种
- 触发器:只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
- 碰撞器:一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
- 碰撞器种类
Box Collider:最常用的立方体碰撞器。
Sphere Collider:球形碰撞器,它的效率是最高的,因为球体的直径是相同的。
Capsule Collider:胶囊体碰撞器,适用于控制的主角。
Wheel Collider:轮胎碰撞器,就像汽车的4个轮胎一样在地面上跑。
Terrain Collider:地形碰撞器,可以在地形编辑时减少网格的数量,这样就能优化效率。
MeshCollider:网格碰撞器,根据美术人员的模型网络生成的碰撞器,其效率也是最低的。建议项目中不要使用它,或者可以让美术人员做一个专门用来检测碰撞的简易网格。
区别
- 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit 触发器一般是触发某种事物时使用,不带有碰撞的物理效果。
void OnTriggerEnter(Collider other)
{
Debug.Log("开始触发");
}
void OnTriggerStay(Collider other)
{
Debug.Log("正在触发");
}
void OnTriggerExit(Collider other)
{
Debug.Log("结束触发");
}
- 碰撞器:有三种方法,分别是OnCollisionEnter,OnCollisionStay,OnCollisionExit 碰撞器一般是碰撞某种事物时使用,带有碰撞的物理效果。
void OnCollisionEnter(Collision other)
{
Debug.Log("开始碰撞");
}
void OnCollisionStay(Collision other)
{
Debug.Log("正在碰撞");
}
void OnCollisionExit(Collision other)
{
Debug.Log("结束碰撞");
}