Unity -- Collider(碰撞器與觸發器)


(2d與3d的Collider可以相互存在,但是無法相互協作,如2d是無法檢測3d的,反之,一樣)

 

在目前掌握的情況分析,在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) / MonoBehaviour.OnTriggerEnter2D(Collider2D other)當進入觸發器
2.MonoBehaviour.OnTriggerExit(Collider other) / MonoBehaviour.OnTriggerExit2D(Collider2D other)當退出觸發器
3.MonoBehaviour.OnTriggerStay(Collider other) / MonoBehaviour.OnTriggerStay2D(Collider2D other)當逗留觸發器

碰撞信息檢測:
1.MonoBehaviour.OnCollisionEnter(Collision collisionInfo)  / MonoBehaviour.OnCollisionEnter2D(Collision2D collisionInfo)當進入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collisionInfo)  / MonoBehaviour.OnCollisionExit2D(Collision2D collisionInfo)當退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collisionInfo) / MonoBehaviour.OnCollisionStay2D(Collision2D collisionInfo) 當逗留碰撞器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM