中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

碰撞器和觸發器

發布時間:2020-06-30 08:53:09 來源:網絡 閱讀:1411 作者:寧金峰 欄目:建站服務器


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復選框,另一個最少要有一個碰撞器組件,此時檢測碰撞的腳本必須附加在那個帶有剛體的觸發器上。

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝| 义乌市| 彭阳县| 六安市| 凌源市| 彩票| 石门县| 分宜县| 靖安县| 道真| 岢岚县| 长宁县| 乌拉特中旗| 大英县| 盐山县| 滁州市| 綦江县| 吴忠市| 麻阳| 左权县| 义乌市| 贵港市| 桐梓县| 班戈县| 南投市| 四川省| 武冈市| 翁源县| 固阳县| 巴马| 德兴市| 巩留县| 毕节市| 伊春市| 敦煌市| 舞阳县| 铜川市| 滦平县| 剑河县| 漾濞| 濉溪县|