碰撞发生的条件:
There are some limitations when using the Mesh Collider. Usually, two Mesh Colliders cannot collide with each other. All Mesh Colliders can collide with any primitive Collider. If your mesh is marked as Convex, then it can collide with other Mesh Colliders.
使用网格碰撞器有一些限制条件。通常,两个网格碰撞器之间不会发生碰撞。所有的网格碰撞器可以和任何原型碰撞器碰撞。如果网格标记为凸起的(Convex),那么就可以和其他网格碰撞器碰撞。
1.标记为凸起的(Convex )的网格碰撞器才能够和其他网格碰撞器发生碰撞。
2.如果碰撞双方是两个网格碰撞器(Mesh Collider)默认不会发生碰撞的,一方需要添加刚体(Rigidbody)并且勾选Convex
导入的模型添加网格碰撞器
勾选模型Generate Colliders选项并apply,之后场景中的此模型会自动添加mesh Collider组件
OnCollisionEnter触发条件
碰撞器和刚体设置完成后发生碰撞会触发void OnCollisionEnter(Collision other)方法,但是需要注意OnCollisionEnter回调方法所在的脚本必须在发生碰撞的一方物体上面挂载着(遇到过把这个回调挂载在多级父物体上结果一直不触发的情况...)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Collider : MonoBehaviour {
PaperPlaneController ppc;
// Use this for initialization
void Start () {
ppc = GameObject.Find ("main").GetComponent(typeof(PaperPlaneController)) as PaperPlaneController;
}
// 碰撞检测
public void OnCollisionEnter(Collision other)
{
// Debug.Log ("接触地面。。。。。" + other.gameObject.name);
//检测是否碰撞到地面
if (other.gameObject.tag == "Ground")
{
ppc.receiveGround ();
}
}
}