兩個物體都有碰撞體和剛體時:
情況1:當物體A勾選了isTrigger, 則觸發了OnTriggerEnter方法.
情況2:當A,B兩個物體都勾選了isTrigger,則觸發了OnTriggerEnter方法.
情況3:當A,B兩個物體都沒有勾選isTrigger,則觸發了OnCollisionEnter 方法
結論1:如果發生了OnTriggerEnter方法,至少有一個物體勾選了isTrigger;如果想發生OnCollisionEnter 方法,則不需要勾選isTrigger。
結論2: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。