Unity3D碰撞檢測及Trigger觸發器的使用及注意事項
首先新建一個Cube,其本身就已自帶了碰撞器Collider,如圖

要使用Trigger檢測物體進入,則需要勾選Is Trigger選項
碰撞檢測觸發器Trigger 有別於碰撞檢測器 Collision,其可以不受物理效果影響,一些可穿透區域的碰撞檢測,可以使用Trigger來進行碰撞檢測
常用方法如下:
OnTriggerEnter 進入時
OnTriggerExit 離開時
OnTriggerStay 處於時
同上碰撞檢測器 Collision 也有3個方法:
OnCollisionEnter
OnCollisionExit
OnCollisionStay
這裡我們需要為跑道添加一個終點撞線的機制,所以使用可穿透的碰撞檢測觸發器Trigger
代碼如下:
1 2 3 4 5
| void OnTriggerEnter (Collider collider ) { print (collider . gameObject . name + ":" + Time . time ) ; } |
OnTriggerEnter傳入的參數必須為Collider,故能觸發該函數的對象必須具有Collider組建。這裡我們用的是角色控制器Character Controller 自帶了Collider組建
此時每當有角色撞線時即會列印角色名及系統時間

接下來我們使用碰撞檢測器 Collision 來進行一個碰撞檢測
首先取消被撞擊對像上的Is Trigger選項,並添加腳本代碼如下
1 2 3 4 5
| void OnCollisionEnter (Collision collision )
{ print (collision . gameObject . name + ":" + Time . time ) ; } |
此時用例為兩個cube,需要注意的是,撞擊者cube均要添加剛體組件,否則無效,Trigger同理。
同時cube的長寬高,不能為0,否則無法觸發。
另一問題是角色控制器的膠囊體與Cube Collider碰撞不激活碰撞檢測,但是手動往前推動一下就會觸發,該問題目前尚未解決,有知道的朋友歡迎留言討論。

本篇疑問尚且留存,待解決後更正。
BeiTown
2013.03.09
原文出處:BeiTown's Coder 编码之源 » Unity3D碰撞检测及Trigger触发器的使用及注意事项