碰撞器与触发器(collider&trigger)

有时候分不清collider里的trigger的用法,不知道什么时候会碰撞,有时候会穿过,在这里进行辨析一下,都是我自己简单的理解,如有错误,欢迎指正。

Collider:碰撞器,用于检测自己的碰撞,有大小。
Trigger:触发器,用于检测自己的穿透,有大小。
rigidbody:刚体,物体的运动物理属性,无大小。
触发器和碰撞器的区别在于是否将Collider的Is Trigger勾上。

我们实验来说明一下,先生成一个Cube做地面,再生成2个实验体Sphere和Capsule,


image.png

这两个都加上刚体rigidbody,Sphere的 isTrigger 勾上,另一个不勾


image.png

他们的Use Gravity都勾上,即使用重力


image.png

运行发现,Sphere穿过了地面
image.png

如果把地面的isTrigger勾上,则无论2个实验体的isTrigger是否勾上,落下时都会穿过。
由此我们发现,

  • 要使物体间穿透,这两个物体至少一个是触发器。
  • 触发器使得可以被穿透,不论穿过它的物体是否是触发器。
    这就好像是《火影》里带土的能力,当发动身体的虚化时,就像自己的身体成为了一个触发器,成为了一个“虚体”,别的物体都可以穿过。

rigidbody

我们给Sphere加上移动的脚本

public class PlayerController : MonoBehaviour {
    Rigidbody rigidbody;
    Vector3 v3;
    public int speed = 2;
    // Use this for initialization
    void Start () {
        rigidbody = transform.GetComponent ();
    }

    // Update is called once per frame
    void Update () {
        float x = Input.GetAxis ("Horizontal");
        float y = Input.GetAxis ("Vertical");
        v3 = new Vector3 (x, 0, y);
        rigidbody.AddForce (v3 * speed);
    }
}

移动起来后去碰撞Capsule,发现Capsule是否加上rigidbody会影响Capsule的反应,没加rigidbody时纹丝不动,加上后一碰即倒。说明刚体rigidbody反应了物体的运动属性。


image.png

触发的方法

    // 进入触发范围调用
    void OnTriggerEnter (Collider other) {
    }
    // 触发范围内持续调用
    void OnTriggerStay (Collider other) {
    }
    // 离开触发范围调用
    void OnTriggerExit (Collider other) {
    }

碰撞的方法

// 碰撞开始调用  
    void OnCollisionEnter (Collision other) {
    }
    // 碰撞持续时调用
    void OnCollisionStay (Collision other) {
    }
    // 碰撞结束调用
    void OnCollisionExit (Collision other) { 
    }

注意只有2个物体都是碰撞器时才会触发各自的OnCollsionXXX方法,否则都只会触发各自的OnTriggerXXX方法,即使有一个为碰撞器,另一个为触发器。

你可能感兴趣的:(碰撞器与触发器(collider&trigger))