unity3D OnTriggerEnter和OnCollisionEnter的一點個人心得(主要講區別)

太抽象的理論總是讓人眼花繚亂,所以我這裏以例證爲主。

1,測試OnTriggerEnter和OnCollisionEnter的區別

測試:如果兩個物體A,B 

兩者都有碰撞體collider(Box Collider,Sphere Collider,Capsule Collider等)

A,B都有剛體(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都有剛體,那麼爲什麼不乾脆把兩個物體都加剛體就沒這麼多麻煩了?

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

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

發佈了26 篇原創文章 · 獲贊 27 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章