【Unity】OnCollisionEnter、OnTriggerEnter與其子物體的聯繫

碰撞器:OnCollisionEnter

觸發器:OnTriggerEnter

條件:至少有一個物體有Rigidbody剛體組件,兩個物體都要有Collider碰撞器組件

 

一、簡單測試OnCollisionEnter和OnTriggerEnter

在場景創建Cube和Sphere,添加Rigidbody和Collider組件,並掛載腳本監聽“void OnCollisionEnter(Collision collision)”和“void OnTriggerEnter(Collider other)”

public class Test : MonoBehaviour
{

    void OnCollisionEnter(Collision collision)
    {
        Debug.Log(gameObject.name + " - OnCollisionEnter - " + collision.gameObject.name);
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(gameObject.name + " - OnTriggerEnter - " + other.gameObject.name);
    }
}

1. 兩個物體的Collider組件的IsTrigger選項都不勾選,兩個組件都是碰撞器,掛載的腳本都會觸發“OnCollisionEnter”函數;

2. 一個勾選IsTrigger選項,一個不勾選,一個作爲碰撞器,一個作爲觸發器,掛載的腳本都會觸發“OnTriggerEnter”函數;

3. 兩個都勾選IsTrigger選項,都作爲觸發器,掛載的腳本都會觸發“OnTriggerEnter”函數;

 

二、OnCollisionEnter、OnTriggerEnter與其子物體的聯繫

有些情況下,子物體的碰撞器/觸發器會觸發父物體的“OnCollisionEnter”、“OnTriggerEnter”函數

比如,父物體添加Rigidbody剛體,沒有碰撞器,子物體沒有Rigidbody,有碰撞器,父物體會觸發“OnCollisionEnter”,子物體不會。

如果,父物體添加Rigidbody剛體,有碰撞器,子物體沒有Rigidbody,有碰撞器,父物體會觸發“OnCollisionEnter”,子物體仍然不會。

所以:有Rigidbody組件的物體,當自身或子物體的碰撞器發生碰撞,會執行“OnCollisionEnter”;當自身或子物體的觸發器發生碰撞,會執行“OnTriggerEnter”。

 

不過,給父物體和子物體分別添加RigidBody組件,在碰撞器和觸發器執行時,會分別檢測,調用對應函數。

如果父物體要屏蔽子物體碰撞器/觸發器,可以給子物體添加Rigidbody。

 

是不是可以說:兩個物體都有Collider碰撞器組件,至少有一個物體或其父物體有Rigidbody剛體組件,就可以發生碰撞?


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章