天天看點

unity3D -- OnTriggerEnter和OnCollisionEnter的差別

1、測試OnTriggerEnter和OnCollisionEnter的差別

測試:如果兩個物體A、B ,都有碰撞體collider 和 剛體(Rigidbody)。

A或者B中有一個勾選isTrigger或者兩者都勾選isTrigger A和B都可以進入OnTriggerEnter方法,但是不可進入OnCollisionEnter方法。

A和B都不勾選isTrigger,A和B能進入OnCollisionEnter方法但是不能進入OnTriggerEnter方法。

結論: OnCollisionEnter方法必須是在兩個碰撞物體都不勾選isTrigger的前提下才能進入,反之隻要勾選一個isTrigger那麼就能進入OnTriggerEnter方法。 OnCollisionEnter和OnTriggerEnter是沖突的不能同時存在的。

2,OnTriggerEnter和OnCollisionEnter的選擇。

如果想實作兩個剛體實體的實際碰撞效果時候用OnCollisionEnter,Unity引擎會自動處理剛體碰撞的效果。

如果想在兩個物體碰撞後自己處理碰撞事件用OnTriggerEnter。

3,一些技巧。

3.1:剛體(Rigidbody)的使用。

兩個碰撞的物體A 和 B

 現在我們就可以分兩種模式來分析了,就是OnTrigger模式和OnCollision模式,因為上面已經詳細介紹了兩者是對立的模式, 

 在OnCollision模式下:

 測試1:如果隻有A有剛體(Rigidbody),那麼當A去碰撞B時,發現A彈開B沒有動。A和B都進入OnCollisionEnter方法

 結論1:隻有剛體能實作真實的實體碰撞。

 測試2:如果隻有A有剛體(Rigidbody),那麼當B去碰撞A時,發現沒有碰撞效果,A和B都沒有進入OnCollisionEnter方法。

 結論2:實作碰撞的條件是,發起碰撞方必須具有剛體。

 這裡我猜測了剛體是用來實作實體真實碰撞的Component,但是這個想法是錯誤的,因為OnTriggerEnter也必須有一個物體具有剛體,是以猜測剛體應該是一個判斷是否實作碰撞的是與否的标志。

 在OnTrigger模式下:

 A和B必須有一個有剛體(Rigidbody),A和B都可以進入OnTriggerEnter方法。
           

4,知識擴充。

上面的内容中有的實驗是A,B有一個有剛體,有的實驗是A,B都有剛體,那麼為什麼不幹脆把兩個物體都加剛體就沒這麼多麻煩了?

其實是這樣的,真實遊戲裡面,有太多的物體,而這些物體如果都有剛體那麼對系統的開銷是很大的,如果可以減少一半的開銷是很不錯的選擇。

比如地面就可以不設定剛體,因為地面是永遠不動的,把人物設定剛體就可以實作真實的實體碰撞效果了。

繼續閱讀