天天看點

Unity3D 的OnTriggerEnter和OnCollisionEnter方法

兩個物體都有碰撞體和剛體時:

情況1:當物體A勾選了isTrigger, 則觸發了OnTriggerEnter方法.

情況2:當A,B兩個物體都勾選了isTrigger,則觸發了OnTriggerEnter方法.

情況3:當A,B兩個物體都沒有勾選isTrigger,則觸發了OnCollisionEnter 方法

結論1:如果發生了OnTriggerEnter方法,至少有一個物體勾選了isTrigger;如果想發生OnCollisionEnter 方法,則不需要勾選isTrigger。

結論2:OnTriggerEnter和OnCollisionEnter 沖突,不能同時發生。

來自官方的表格:

Unity3D 的OnTriggerEnter和OnCollisionEnter方法
Unity3D 的OnTriggerEnter和OnCollisionEnter方法

當A,B有一個添加了剛體(Rigidbody)時:

OnCollisionEnter方法 :

若A添加了剛體,B沒有添加剛體,A去碰撞B,則A會被彈開,B不會運動,此時A、B都會觸發OnCollisionEnter方法。

若A添加了剛體,B沒有添加剛體,B去碰撞A,不會發生碰撞效果,此時A和B都不會觸發OnCollisionEnter方法。

OnTriggerEnter方法:

隻要A和B中有一個添加了剛體,無論誰碰撞誰,兩者都會觸發 OnTriggerEnter方法。但由于至少一方勾選了isTrigger,是以不會發生碰撞效果。

總結:

OnCollisionEnter方法要求碰撞的發起方必須擁有剛體,而被碰撞方有沒有剛體并不重要。OnTriggerEnter方法則對此沒有要求,隻需要碰撞雙方有一個具有剛體即可觸發。即剛體是一個判斷是否實作碰撞的是與否的标志。

剛體對于系統的開銷是很大的,是以在使用剛體時,根據可能發生的碰撞觸發事件,适當的減少剛體,是一個減少資源消耗的好辦法。 比如地面就可以不設定剛體,因為地面是永遠不動的,把人物設定剛體就可以實作真實的實體碰撞效果了。

OnTriggerEnter和OnCollisionEnter的選擇:

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

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

繼續閱讀