有時候分不清collider里的trigger的用法,不知道什么時候會碰撞,有時候會穿過缔赠,在這里進(jìn)行辨析一下屑咳,都是我自己簡單的理解,如有錯誤,歡迎指正。
Collider:碰撞器,用于檢測自己的碰撞岛心,有大小。
Trigger:觸發(fā)器篮灼,用于檢測自己的穿透忘古,有大小。
rigidbody:剛體诅诱,物體的運(yùn)動物理屬性髓堪,無大小。
觸發(fā)器和碰撞器的區(qū)別在于是否將Collider的Is Trigger勾上逢艘。
我們實(shí)驗(yàn)來說明一下旦袋,先生成一個Cube做地面,再生成2個實(shí)驗(yàn)體Sphere和Capsule它改,
image.png
這兩個都加上剛體rigidbody疤孕,Sphere的 isTrigger 勾上,另一個不勾
image.png
他們的Use Gravity都勾上央拖,即使用重力
image.png
運(yùn)行發(fā)現(xiàn)祭阀,Sphere穿過了地面
image.png
如果把地面的isTrigger勾上鹉戚,則無論2個實(shí)驗(yàn)體的isTrigger是否勾上,落下時都會穿過专控。
由此我們發(fā)現(xiàn)抹凳,
- 要使物體間穿透,這兩個物體至少一個是觸發(fā)器伦腐。
- 觸發(fā)器使得可以被穿透赢底,不論穿過它的物體是否是觸發(fā)器。
這就好像是《火影》里帶土的能力柏蘑,當(dāng)發(fā)動身體的虛化時幸冻,就像自己的身體成為了一個觸發(fā)器,成為了一個“虛體”咳焚,別的物體都可以穿過洽损。
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,發(fā)現(xiàn)Capsule是否加上rigidbody會影響Capsule的反應(yīng)革半,沒加rigidbody時紋絲不動碑定,加上后一碰即倒。說明剛體rigidbody反應(yīng)了物體的運(yùn)動屬性又官。
image.png
觸發(fā)的方法
// 進(jìn)入觸發(fā)范圍調(diào)用
void OnTriggerEnter (Collider other) {
}
// 觸發(fā)范圍內(nèi)持續(xù)調(diào)用
void OnTriggerStay (Collider other) {
}
// 離開觸發(fā)范圍調(diào)用
void OnTriggerExit (Collider other) {
}
碰撞的方法
// 碰撞開始調(diào)用
void OnCollisionEnter (Collision other) {
}
// 碰撞持續(xù)時調(diào)用
void OnCollisionStay (Collision other) {
}
// 碰撞結(jié)束調(diào)用
void OnCollisionExit (Collision other) {
}
注意只有2個物體都是碰撞器時才會觸發(fā)各自的OnCollsionXXX方法延刘,否則都只會觸發(fā)各自的OnTriggerXXX方法,即使有一個為碰撞器赏胚,另一個為觸發(fā)器访娶。