1. 程式人生 > >Unity3D碰撞檢測和OnTriggerEnter用法

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
  • 2422

這裡寫圖片描述

準備一個指令碼:shiyan.cs ,指令碼內容如下:

這裡寫圖片描述

指令碼掛在小球上,然後執行場景,拖動小球撞盒子,然後再拖動盒子撞小球,分別看控制檯列印結果

然後將指令碼掛在盒子上,然後執行場景,拖動小球撞盒子,然後再拖動盒子撞小球,分別看控制檯列印結果

OnTriggerEnter觸發條件:

碰撞雙方都必須是碰撞體 
碰撞雙方其中一個碰撞體必須勾選IsTigger選項 
碰撞雙方其中一個必須是剛體 
剛體的IsKinematic選項可以勾選也可以不勾選

只要滿足上面兩個條件,不管誰主動都會觸發

備註: 
OnTriggerEnter方法的形參物件指的是碰撞雙方中沒有攜帶OnTriggerEnter方法的一方 
OnTriggerEnter方法前可以帶上public或private,或者乾脆兩個都不帶