[轉帖]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都有剛體,那么為什么不干脆把兩個物體都加剛體就沒這么多麻煩了?

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

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

----

來自地址:http://hi.baidu.com/dajiangfengdu2/item/8dec48c008ebf823e80f2e38

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM