您好,登錄后才能下訂單哦!
1、什么是碰撞器
碰撞器是一群組件,它包含了很多種類,比如: Box Collider 盒碰撞器、Capsule Collider 膠囊碰撞器、Mesh Collider 網格碰撞器、Sphere Collider 球碰撞器 等等這一類組件,這些碰撞器應用的場合不同,但都必須加到GameObjecet身上。(如下圖):
2、什么是觸發器
所謂觸發器,只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性選擇框。如下圖:
3、區別:
碰撞器
1)碰撞器有碰撞效果
2)IsTrigger=false
3)碰撞信息檢測回調函數
1.OnCollisionEnter( Collision other ) 當進入碰撞器(開始碰撞時)
2.OnCollisionStay( Collision other ) 當逗留碰撞器(一直碰撞時)
3.OnCollisionExit( Collision other) 當退出碰撞器(結束碰撞時)
觸發器
1)觸發器沒有碰撞效果
2)IsTrigger=true;
3)觸發信息檢測:
1.OnTriggerEnter( Collider other )當進入觸發器
2.OnTriggerExit( Collider other )當退出觸發器
3.OnTriggerStay( Collider other )當逗留觸發器
4、碰撞和觸發的必要條件
碰撞測試
1)兩個cube上面都添加了collider,游戲運行發生了穿透
2)我們為×××cube添加rigidbody,取消rigidbody上面的重力選項
游戲運行,我們發現×××cube被彈飛,而紅色cube沒有發生改變
3)我們為紅色cube也加上rigidbody ,取消重力選項
游戲運行,兩個cube都被彈開了
碰撞總結
1、如果兩個物體,只要有一個沒有Collider,即使任意一個物體有rigidbody,都會發生穿越(即,沒Collider就穿越);
2、如果兩個物體都有Collider,有rigidbody的物體會發生碰撞,而沒有rigidbody的一方則不會受到影響(注意一下誰碰誰);
3、如果兩個物體都有Collider,無rigidbody的物體碰有rigidbody的物體,則并不會發生碰撞
(易忽略,單獨拿出來講。另外這種情況下,當高速移動無rigidbody的物體時,偶爾會出現發生碰撞的現象,不知道是不是unity的一個bug)
綜上,兩物體發生碰撞的必要條件是:
兩個物體都必須帶有碰撞器(Collider),其中至少一個物體帶有Rigidbody剛體。(只有帶Rigidbody剛體的一方會受到物理引擎的影響)
可能會有人想如果為物體都加上剛體不就不需要這么糾結了嗎?
有兩方面原因:
一是游戲場景物體很多,都加剛體,系統的開銷會很大;
二是有時候我就需要其中一個物體是不動的,比如地面。
注意:
1、在一次碰撞中,“剛接觸”和“接觸完”只被調用一次,而“碰撞中”則是在接觸時一直被調用。
2、函數的參數則是被撞的那個物體。我們可以通過此參數獲取被撞物體信息。
我們檢測一下回調函數:
我們首先創建一個這種場景
我們給紅色小球添加rigidbody,勾選上重力選項,并添加腳本
下圖為腳本內容:
運行游戲,輸出結果為:
由此上面的測試我們可以清楚的看到三個方法的調用時機
其中other參數為碰撞到的物體
觸發測試
1、我們做碰撞測試的例子,我們創建一個下圖這樣的場景,把紅色cube的IsTrigger勾上(由于IsTrigger是觸發器身上的一個屬性,所以兩個物體都要加collider,我們暫且不加rigidbody,再紅色cube身上添加腳本)
運行游戲我們發現紅色cube會穿過×××cube但是沒有打印任何一句話。
所以觸發器的觸發條件是基于碰撞的基礎上的,我們分別給兩個cube加上rigidbody,取消重力選項
紅色cube穿過×××cube并且調用了觸發器的三個回調函數,其中
逗留函數調用了50次,說明紅色cube再穿過×××cube的時候(重疊)期間,一直再重復調用逗留觸發器
觸發結論
1、和碰撞不同,觸發無論誰碰誰,結果都一樣;
2、觸發的必要條件:至少有一個碰撞器勾選了IsTrigger,至少有一個物體具有剛體,才會觸發;
3、碰撞和觸發的聯系和區別以及何時使用它們
由于碰撞是可以發生物理效果的同時觸發事件,而觸發是不發生物理效果的情況下觸發事件;
所以,還是具體情況具體對待,知道了原理就靈活運用吧。
舉個例子來說吧。
足球射到墻上會發生碰撞,而足球出界了并不會發生碰撞,而是裁判吹哨這個事件被觸發。
那么你就可以在墻上加一個碰撞體不勾選IsTrigger,而出界線加一個Collider并勾上IsTrigger。
碰撞和檢測的相關的注意點
兩個注意
注意1:
兩個物體發生碰撞,如果要檢測到碰撞信息,那么其中必有一個物體既帶有碰撞器,又帶有剛體,且檢測碰撞信息的腳本必須附著在帶有剛體的碰撞器上。
注意2:
兩個GameObject發生碰撞,要想檢測到觸發信息,最少要有一個剛體碰撞器并且勾選了IsTrigger復選框,另一個最少要有一個碰撞器組件,此時檢測碰撞的腳本必須附加在那個帶有剛體的觸發器上。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。