1.Collider(碰撞器)
- 碰撞器即判定該物體是否與另外一個物體碰撞器接觸上的而觸發的機制,以碰撞器是否有接觸來判定物體是否發生碰撞或觸發一些事件,如果兩個物體的碰撞器接觸上就會觸發碰撞器的默認方法 OnCollisionEnter()、OnCollisionStay()和OnCollisionExit(),可以在這些方法里寫上碰撞觸發的事件。
添加給cube的腳本
- 一般創建一個物體時都會自帶一個碰撞器,如創建一個cube,它的屬性中就會帶有Box Collider碰撞器,點擊cube。unity默認的cube長寬高都是1,所以碰撞器的長寬高也是1,點擊cube能隱隱約約看到它邊邊的綠線,那就是碰撞器
cube
cube的屬性
- 創建一個物體時碰撞器默認與物體一樣大,通過調節碰撞器的屬性可以改變碰撞器的位置和大小,現在讓我們來模擬一下物體發生碰撞的情況吧。
碰撞情景一 兩個對象都含有剛體和碰撞器
另一個對象球體Sphere的腳本
球體腳本
情景一
- 顯而易見的,當運行游戲場景點擊鼠標使球體向前移動與立方體發生碰撞時,兩個對象掛載的腳本OnCollision方法都觸發了(兩者也與地面碰撞觸發碰撞腳本)。
輸出結果:
情景一
碰撞情景二 立方體沒有剛體
情景二
- 當運行游戲場景時,球體依舊與地面有碰撞觸發腳本,但立方體沒有,然后點擊鼠標移動球體與立方體碰撞時,兩者都觸發了各自的碰撞腳本。
輸出結果:
情景二
碰撞情景三 立方體沒有碰撞體也沒有剛體
情景三
- 當運行游戲場景時,球體依舊與地面碰撞觸發腳本,但移動球體與立方體接觸時,并沒有觸發碰撞腳本,并且球體能穿過立方體。試著給立方體添加剛體并不使用重力(如果使用重力立方體會穿過地面往下掉),然而結果還是一樣。
輸出結果:
情景三
碰撞情景四 兩個物體都沒有剛體
情景四
- 結果是什么都沒有發生,沒觸發碰撞腳本,并且還是會穿過去。
輸出結果:
情景四
總結:
1、如果兩個有碰撞器的物體想觸發碰撞方法,其中一方必須要有剛體,否則不會觸發并且會相互穿透過去,簡而概之就是碰撞器要發生碰撞只要其中一方有剛體。
2、如果兩個有剛體的物體向觸發碰撞方法,雙方需要有碰撞器才能觸發,否則不會觸發并穿過去,簡而概之就是剛體要發生碰撞兩邊都需要碰撞器。
3、碰撞器決定了碰撞發生時的邊界條件,剛體決定了碰撞發生后的物體運動效果。
2.Trigger(觸發器)
- 觸發器是碰撞器的其中一個屬性,這里特意列出來說,是因為雖然觸發器從屬于碰撞器卻不能與碰撞器默認的碰撞方法同時觸發,它有自己單獨的默認碰撞觸發方法OnTriggerEnter、OnTriggerStay和OnTriggerExit。現在模擬一下碰撞情景。
情景一 立方體有碰撞器無觸發器
球體的觸發腳本如下,立方體也是類似的腳本:
球體的腳本
球體
立方體
情景一
- 因為球體沒有使用碰撞器并且使用了剛體的Gravity重力所以場景一運行球體就穿過地面往下掉了,所以我們把球體的UseGravity勾掉不使用重力然再運行,只有球體與地面觸發了腳本,但當兩個物體相接觸時觸發了各自的觸發腳本,輸出結果:
情景一
情景二 立方體有觸發器無剛體
情景二
- 其結果是球體與地面觸發腳本立方體沒有,當球體與立方體接觸上后各自調用觸發腳本,并且可穿透,輸出結果:
情景二
情景三 雙方都沒有剛體
情景三
- 其結果是什么都沒觸發,可以借此推斷出如果其中一方換成碰撞器也會什么都不觸發,輸出結果:
情景三
總結:
1.兩個物體想打印觸發腳本的觸發方法至少有一個觸發器和一個剛體(另一個可以是碰撞器也可以是觸發器,然后其中一個帶有剛體)。
2.無剛體什么情況都不會打印觸發方法。
拓展:一般我們把觸發器方法寫在角色碰到的物體上,角色一般不參與觸發方法,只寫碰撞方法。
碰撞器和觸發器的區別?
****3-1、****碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性。
****3-2、****當IsTrigger=false時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果,可以調用OnCollisionEnter/Stay/Exit函數;
****3-3、****當IsTrigger=true時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以調用OnTriggerEnter/Stay/Exit函數。
****3-4、****如果既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動或要檢測一個物件是否經過空間中的某個區域這時就可以用到觸發器。
文/雷潮(簡書作者)原文鏈接:http://www.lxweimin.com/p/c2d2415f80ac著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。