溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

碰撞器和觸發(fā)器

發(fā)布時(shí)間:2020-06-30 08:53:09 來(lái)源:網(wǎng)絡(luò) 閱讀:1410 作者:寧金峰 欄目:建站服務(wù)器


1、什么是碰撞器

碰撞器是一群組件,它包含了很多種類(lèi),比如: Box Collider 盒碰撞器、Capsule Collider 膠囊碰撞器、Mesh Collider 網(wǎng)格碰撞器、Sphere Collider 球碰撞器  等等這一類(lèi)組件,這些碰撞器應(yīng)用的場(chǎng)合不同,但都必須加到GameObjecet身上。(如下圖):

碰撞器和觸發(fā)器

2、什么是觸發(fā)器

碰撞器和觸發(fā)器

所謂觸發(fā)器,只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性選擇框。如下圖:

 

3、區(qū)別:
       碰撞器
     1)碰撞器有碰撞效果
     2)IsTrigger=false
     3)碰撞信息檢測(cè)回調(diào)函數(shù)
    1.OnCollisionEnter( Collision other ) 當(dāng)進(jìn)入碰撞器(開(kāi)始碰撞時(shí))
     2.OnCollisionStay( Collision other ) 當(dāng)逗留碰撞器(一直碰撞時(shí))
     3.OnCollisionExit( Collision other)  當(dāng)退出碰撞器(結(jié)束碰撞時(shí))

觸發(fā)器
    1)觸發(fā)器沒(méi)有碰撞效果
    2)IsTrigger=true;
    3)觸發(fā)信息檢測(cè):

1.OnTriggerEnter( Collider other )當(dāng)進(jìn)入觸發(fā)器
         2.OnTriggerExit( Collider other )當(dāng)退出觸發(fā)器
         3.OnTriggerStay( Collider other )當(dāng)逗留觸發(fā)器
4、碰撞和觸發(fā)的必要條件

碰撞測(cè)試

1)兩個(gè)cube上面都添加了collider,游戲運(yùn)行發(fā)生了穿透

碰撞器和觸發(fā)器 

 

 

 

 

 

 

 

 

2)我們?yōu)椤痢痢羉ube添加rigidbody,取消rigidbody上面的重力選項(xiàng)

碰撞器和觸發(fā)器 

 

 

 

 

 

 

 

 

 

碰撞器和觸發(fā)器 

 

 

 

 

游戲運(yùn)行,我們發(fā)現(xiàn)×××cube被彈飛,而紅色cube沒(méi)有發(fā)生改變

3)我們?yōu)榧t色cube也加上rigidbody ,取消重力選項(xiàng)

碰撞器和觸發(fā)器 

 

 

 

 

 

 

游戲運(yùn)行,兩個(gè)cube都被彈開(kāi)了

碰撞總結(jié)

1、如果兩個(gè)物體,只要有一個(gè)沒(méi)有Collider,即使任意一個(gè)物體有rigidbody,都會(huì)發(fā)生穿越(即,沒(méi)Collider就穿越);

2、如果兩個(gè)物體都有Collider,有rigidbody的物體會(huì)發(fā)生碰撞,而沒(méi)有rigidbody的一方則不會(huì)受到影響(注意一下誰(shuí)碰誰(shuí));

3、如果兩個(gè)物體都有Collider,無(wú)rigidbody的物體碰有rigidbody的物體,則并不會(huì)發(fā)生碰撞
(易忽略,單獨(dú)拿出來(lái)講。另外這種情況下,當(dāng)高速移動(dòng)無(wú)rigidbody的物體時(shí),偶爾會(huì)出現(xiàn)發(fā)生碰撞的現(xiàn)象,不知道是不是unity的一個(gè)bug)
   綜上,兩物體發(fā)生碰撞的必要條件是:
      兩個(gè)物體都必須帶有碰撞器(Collider),其中至少一個(gè)物體帶有Rigidbody剛體。(只有帶Rigidbody剛體的一方會(huì)受到物理引擎的影響)
      可能會(huì)有人想如果為物體都加上剛體不就不需要這么糾結(jié)了嗎?
有兩方面原因:
      一是游戲場(chǎng)景物體很多,都加剛體,系統(tǒng)的開(kāi)銷(xiāo)會(huì)很大;
      二是有時(shí)候我就需要其中一個(gè)物體是不動(dòng)的,比如地面。
  注意:
      1、在一次碰撞中,“剛接觸”和“接觸完”只被調(diào)用一次,而“碰撞中”則是在接觸時(shí)一直被調(diào)用。
      2、函數(shù)的參數(shù)則是被撞的那個(gè)物體。我們可以通過(guò)此參數(shù)獲取被撞物體信息。

我們檢測(cè)一下回調(diào)函數(shù):

我們首先創(chuàng)建一個(gè)這種場(chǎng)景

碰撞器和觸發(fā)器 


 

 

 

 

 

我們給紅色小球添加rigidbody,勾選上重力選項(xiàng),并添加腳本

碰撞器和觸發(fā)器 

 

 

 

 

 

 

 

 

 

 

下圖為腳本內(nèi)容:

碰撞器和觸發(fā)器 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

運(yùn)行游戲,輸出結(jié)果為:

碰撞器和觸發(fā)器 

 

 

 

 

 

由此上面的測(cè)試我們可以清楚的看到三個(gè)方法的調(diào)用時(shí)機(jī)

其中other參數(shù)為碰撞到的物體

 

 

 

 

觸發(fā)測(cè)試

1、我們做碰撞測(cè)試的例子,我們創(chuàng)建一個(gè)下圖這樣的場(chǎng)景,把紅色cube的IsTrigger勾上(由于IsTrigger是觸發(fā)器身上的一個(gè)屬性,所以?xún)蓚€(gè)物體都要加collider,我們暫且不加rigidbody,再紅色cube身上添加腳本)

碰撞器和觸發(fā)器 

 

 

 

碰撞器和觸發(fā)器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

運(yùn)行游戲我們發(fā)現(xiàn)紅色cube會(huì)穿過(guò)×××cube但是沒(méi)有打印任何一句話。

所以觸發(fā)器的觸發(fā)條件是基于碰撞的基礎(chǔ)上的,我們分別給兩個(gè)cube加上rigidbody,取消重力選項(xiàng)

碰撞器和觸發(fā)器 

 

 

 

 

 

 

 

 

 

碰撞器和觸發(fā)器紅色cube穿過(guò)×××cube并且調(diào)用了觸發(fā)器的三個(gè)回調(diào)函數(shù),其中

 

 

 

 

 

 

 

 

逗留函數(shù)調(diào)用了50次,說(shuō)明紅色cube再穿過(guò)×××cube的時(shí)候(重疊)期間,一直再重復(fù)調(diào)用逗留觸發(fā)器

觸發(fā)結(jié)論
    1、和碰撞不同,觸發(fā)無(wú)論誰(shuí)碰誰(shuí),結(jié)果都一樣;
    2、觸發(fā)的必要條件:至少有一個(gè)碰撞器勾選了IsTrigger,至少有一個(gè)物體具有剛體,才會(huì)觸發(fā);
    3、碰撞和觸發(fā)的聯(lián)系和區(qū)別以及何時(shí)使用它們
     由于碰撞是可以發(fā)生物理效果的同時(shí)觸發(fā)事件,而觸發(fā)是不發(fā)生物理效果的情況下觸發(fā)事件;
     所以,還是具體情況具體對(duì)待,知道了原理就靈活運(yùn)用吧。
舉個(gè)例子來(lái)說(shuō)吧。
    足球射到墻上會(huì)發(fā)生碰撞,而足球出界了并不會(huì)發(fā)生碰撞,而是裁判吹哨這個(gè)事件被觸發(fā)。
    那么你就可以在墻上加一個(gè)碰撞體不勾選IsTrigger,而出界線加一個(gè)Collider并勾上IsTrigger。

碰撞和檢測(cè)的相關(guān)的注意點(diǎn)
   兩個(gè)注意
     注意1:
     兩個(gè)物體發(fā)生碰撞,如果要檢測(cè)到碰撞信息,那么其中必有一個(gè)物體既帶有碰撞器,又帶有剛體,且檢測(cè)碰撞信息的腳本必須附著在帶有剛體的碰撞器上。

     注意2:
     兩個(gè)GameObject發(fā)生碰撞,要想檢測(cè)到觸發(fā)信息,最少要有一個(gè)剛體碰撞器并且勾選了IsTrigger復(fù)選框,另一個(gè)最少要有一個(gè)碰撞器組件,此時(shí)檢測(cè)碰撞的腳本必須附加在那個(gè)帶有剛體的觸發(fā)器上。

 

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI