有时候分不清collider里的trigger的用法,不知道什么时候会碰撞,有时候会穿过,在这里进行辨析一下,都是我自己简单的理解,如有错误,欢迎指正。
Collider:碰撞器,用于检测自己的碰撞,有大小。
Trigger:触发器,用于检测自己的穿透,有大小。
rigidbody:刚体,物体的运动物理属性,无大小。
触发器和碰撞器的区别在于是否将Collider的Is Trigger勾上。
我们实验来说明一下,先生成一个Cube做地面,再生成2个实验体Sphere和Capsule,

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

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

运行发现,Sphere穿过了地面

如果把地面的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<Rigidbody> ();
}
// 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反应了物体的运动属性。

触发的方法
// 进入触发范围调用
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方法,即使有一个为碰撞器,另一个为触发器。
网友评论