Unity3D碰撞檢測和OnTriggerEnter用法
在目前掌握的情況分析,在Unity中參與碰撞的物體分2大塊:1.發起碰撞的物體。2.接收碰撞的物體。
1. 發起碰撞物體有:Rigodbody , CharacterController .
2. 接收碰撞物體由:所有的Collider .
工作的原理為:發生碰撞的物體中必須要有“發起碰撞”的物體。否則,碰撞不響應。
比如:牆用BoxCollider ,所以牆與牆之間無反應。
比如:一個帶有Rigidbody屬性的箱子,能落到帶有MeshCollider屬性的地面上。
比如:一個帶有Rigidbody屬性的箱子,可以被一個帶有CharacterController 屬性的人推著跑。
就是此原因。
在所有Collider上有一個Is Trigger 的boolean型引數。
當發生碰撞反應的時候,會先檢查此屬性。
當啟用此選項時,會呼叫碰撞雙方的指令碼 OnTrigger***, 反之,指令碼方面沒有任何反應。
當啟用此選項時,不會發生後續物理的反應。反之,發生後續的物理反應。
總結:Is Trigger 好比是一個物理功能的開關, 是要“物理功能”還是要“OnTrigger指令碼”。
在Rigodbody 上有一個Use Gravity 的boolean型引數.
Unity 物理引擎,處理的一個細節:
當一個CharacterController不發生位置變化,一個Collier發生位置變化後,產生碰撞。將不會呼叫任何碰撞反映。
物理引擎視為CharacterController無碰撞.
碰撞器由來
1.系統預設會給每個物件(GameObject)新增一個碰撞元件(ColliderComponent),一些背景物件則可以取消該元件。
2.在unity3d中,能檢測碰撞發生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發器。這兩種方式的應用非常廣泛。為了完整的瞭解這兩種方式,我們必須理解以下概念:
(一)碰撞器是一群元件,它包含了很多種類,比如:Box Collider,Capsule Collider等,這些碰撞器應用的場合不同,但都必須加到GameObjecet身上。
(二)所謂觸發器,只需要在檢視面板中的碰撞器元件中勾選IsTrigger屬性選擇框。
(三)在Unity3d中,主要有以下介面函式來處理這兩種碰撞檢測:
觸發資訊檢測:
1.MonoBehaviour.OnTriggerEnter( Collider other )當進入觸發器
2.MonoBehaviour.OnTriggerExit( Collider other )當退出觸發器
3.MonoBehaviour.OnTriggerStay( Collider other )當逗留觸發器
碰撞資訊檢測:
1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 當進入碰撞器
2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 當退出碰撞器
3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 當逗留碰撞器
OnTriggerEnter
原創 2016年12月06日 16:49:20準備一個指令碼:shiyan.cs ,指令碼內容如下:
指令碼掛在小球上,然後執行場景,拖動小球撞盒子,然後再拖動盒子撞小球,分別看控制檯列印結果
然後將指令碼掛在盒子上,然後執行場景,拖動小球撞盒子,然後再拖動盒子撞小球,分別看控制檯列印結果
OnTriggerEnter觸發條件:
碰撞雙方都必須是碰撞體
碰撞雙方其中一個碰撞體必須勾選IsTigger選項
碰撞雙方其中一個必須是剛體
剛體的IsKinematic選項可以勾選也可以不勾選
只要滿足上面兩個條件,不管誰主動都會觸發
備註:
OnTriggerEnter方法的形參物件指的是碰撞雙方中沒有攜帶OnTriggerEnter方法的一方
OnTriggerEnter方法前可以帶上public或private,或者乾脆兩個都不帶