Unity3D-Collider(碰撞器)和觸發器(Trigger)

一、碰撞器(Collider)

? ? ? ? ? ? ? ? 如: Box Collider 盒碰撞器、Capsule Collider 膠囊碰撞器、Mesh Collider 網格碰撞器、Sphere Collider球碰撞器? 等等這一類組件就是碰撞器。

1、碰撞器的方法

2、碰撞器的幾種情況

(1)情況一:當兩個游戲對象擁有剛體和碰撞器,不管腳本掛載那個游戲對象身上都可以進入OnCollision,兩者都掛在碰撞器腳本都會調用各自身腳本上的OnCollision方法。

結果:

(2)情況二:

? · 白色膠囊沒有剛體,但是有碰撞器,也有碰撞器腳本,一開始不會進入自身的碰撞器方法。

· 紅色的小球有剛體,有碰撞器,也有碰撞器腳本,一開始就會進入自身的碰撞器方法打印與地面的接觸。

· 當兩個物體發生碰撞,兩者腳本中的碰撞器方法都會被觸發打印

結果:

在一開始發現只有有剛體的紅色小球打印了自己的碰撞器方法

兩物體在碰撞中

當發生碰撞后如下結果

各自的腳本打印

(3)情況三:紅色的小球有剛體,有碰撞器,也有碰撞器腳本,一開始就會進入自身的碰撞器方法打印與地面的接觸,而膠囊怎不會打印任何方法。

二者相碰,一擁有剛體與碰撞器并且身上掛載碰撞器方法的紅色小球遇到沒有碰撞器的膠囊(不管有沒有剛體)會穿過去。

結果:

(a)白色膠囊沒有剛體 、沒有碰撞器

(b)白色膠囊有剛體 、沒有碰撞器

(4)情況四:當碰撞兩方只有碰撞器沒有剛體會互相穿過

? ? ? ? ? ? ? ? ? ? ? ? ?結果很明顯:沒有打印任何東西

總結:

1、只要有剛體有碰撞器,并且與其他碰撞器碰撞就會進入自身的碰撞器方法

2、沒有剛體,有碰撞器的物體被一個擁有剛體的碰撞器碰撞,都會調用自身的碰撞器方法。

3、沒有剛體的兩個碰撞器相撞不會調用任何碰撞器方法

得出結論:

<1>碰撞器(Collider)不需要剛體(Rigidbody)

<2>剛體(Rigidbody)要發生碰撞,一定需要碰撞器(Collider)

<3>碰撞器決定了碰撞發生時的邊界條件

<4>剛體決定了碰撞發生后的物體的運動效果

<5>沒有碰撞器的剛體,會在物理模擬中相互穿透。

二、觸發器(Trigger)

? ? ? ? ? ? 這些(Box Collider 盒碰撞器、Capsule Collider 膠囊碰撞器、Mesh Collider 網格碰撞器、Sphere Collider球碰撞器? 等等這一類組件。)碰撞器在檢視面板中勾選IsTrigger屬性就變成了觸發器

1、觸發器方法

2、觸發器的幾種情況

(1)情況一:當兩方沒有剛體,只有觸發器,,不會打印觸發器方法。

無打印:

其中一方是觸發器,另一方是碰撞器,都不會打印東西。

無打印

(2)情況二:當有剛體的觸發器,一開始就會與其相撞的物體產生交互,穿透,并打印觸發方法。

打印結果:

(3)情況三:

當它與方塊碰撞的時候,會打印各自的觸發器方法,如下圖:

(4)情況四:當兩方都有觸發器并且都擁有剛體,碰撞的時候會打印各自的觸發器方法

(5)情況五:只要一方是觸發器,另一方有碰撞體就會觸發各自的觸發器方法

結論:

1、想要打印觸發器方法,必須有一方是觸發器,必須有一方帶有剛體。二者缺一不可。

2、雙方都是觸發器,或者其中一方是觸發器,另一方是碰撞器,都不會打印。

3、只要一方是觸發器,并且有剛體組件,不管另一方是碰撞體還是觸發器都會打印各自的觸發器方法。

4、一般我們將觸發器方法寫在角色碰到的物體上,角色一般不參與觸發方法。只寫碰撞方法。

三、碰撞器和觸發器的區別?

<1>碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性。

<2>當IsTrigger=false時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果,可以調用OnCollisionEnter/Stay/Exit函數;

<3>當IsTrigger=true時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以調用OnTriggerEnter/Stay/Exit函數。

<4>如果既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動或要檢測一個物件是否經過空間中的某個區域這時就可以用到觸發器。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容