茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675149 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_236.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

Game Play Maker : [轉貼]簡單瞭解 Unity 「Collision碰撞」與「Trigger觸發」

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]簡單瞭解 Unity 「Collision碰撞」與「Trigger觸發」

[Unity] 簡單瞭解「Collision碰撞」與「Trigger觸發」

作者:旭曜靈│2014-01-06 17:58:01│贊助:6│人氣:2066
Unity 是套非常好用的遊戲開發引擎,並且有提供 免費版本 給一般使用者,
內建的物理系統讓使用者不需寫長長的程式碼,
就能夠迅速設定好所有物件之間的碰撞關係,
做出讓角色走不過去的牆、或是可以射穿牆壁的子彈等等。

不過它的設定相當細,若是分不清其中差異,很容易就會陷入鬼打牆的窘境。

幸好這是個資訊發達的時代,網路上總有熱心人士分享資訊──


光看表格可能不夠直覺,也無法瞭解物件動靜的影響,
所以我以自己的實測心得解釋一下。

主要觀念──

1) 想要讓程式判斷兩個物件有接觸,則雙方都必需要有Collider(碰撞器),
 並且“正在動的一方”一定要有Rigidbody(剛體)才有效,另一方有沒有剛體無所謂。
 ※也就是說,如果動的一方沒有剛體,它去撞的靜止一方即使有剛體,也是當作沒撞到。


2) 接下來有兩種方式判斷接觸,
  一、 Collision碰撞,造成物理碰撞,可以在碰撞時執行OnCollision事件。
  二、 Trigger觸發,取消所有物理碰撞,可以在觸發時執行OnTrigger事件。
 所以兩個物件A跟B接觸時,不可能同時產生碰撞+觸發,最多產生其中一種,
 但是可以辦到讓A跟B產生碰撞,A跟C產生觸發。

3) 產生接觸的設定方式如下──


 一、Collision碰撞:雙方都有碰撞器,並且至少動的一方有剛體,
   就會造成碰撞,可以執行OnCollision事件。
   ※但若雙方都勾了Kinematic運動學,或任一方勾了Trigger觸發器,則碰撞無效。

 二、Trigger觸發:雙方都有碰撞器,並且至少動的一方有剛體,
   並且至少其中一方的碰撞器有勾觸發器,就會造成觸發,可以執行OnTrigger事件。


4) 接觸後的事件又細分為Enter、Stay、Exit三種,
 以Trigger為例,就是OnTriggerEnter、OnTriggerStay、OnTriggerExit(Collision依此類推)。
 Enter事件表示當兩個物件接觸的瞬間,會執行一次這個事件;
 Stay事件表示當兩個物件持續接觸時,會不斷執行這個事件;
 Exit事件表示當兩個物件分開的瞬間,會執行一次這個事件。




細部解釋──

【Collider碰撞器】:最重要的核心!會對其他物件產生碰撞。
 若自身要受到碰撞的話,則需要碰撞器+剛體,缺一不可。
 若自身要受到程式Translate位移或Rotate旋轉,也至少需要碰撞器。

【IsTrigger觸發器】勾了就不允許自身受到/造成碰撞,
 也不會受到重力等物理作用力影響。
 雙方會直接穿越,就只能判斷觸發。
 但自身還是可以受到程式位移或旋轉。

【Rigidbody剛體】:允許自身受到碰撞,允許雙方產生Trigger觸發。
 加了剛體的物件才會受到物理作用力,如受到重力而落下、被物理作用力推動/旋轉,
 也無法主動穿越其他碰撞器,這都是受到剛體的影響。
 而對方若是沒加剛體,對方就不會受到碰撞的作用力推擠,
 但仍然可以判斷雙方有碰撞。


 打個比方,沒加剛體的碰撞器就像鬼魂,加了之後就像一輛車,
 鬼不怕撞車而穿過去,但車還是會知道自己撞到鬼而停下來。

【IsKinematic運動學】:不允許自身受到碰撞,但還是會對其他物件造成碰撞。
 也不會受到重力等物理作用力影響。
 ※雙方都勾運動學的話,雙方都不會受到碰撞,會直接穿越,
  因此會被視為沒有碰撞到,無法執行OnCollision事件。
 ※雖然自身碰撞器不加剛體也可以達到這效果,但有可能會導致雙方都沒剛體,

  而無法產生任何碰撞、觸發,所以會動的物件還是都加剛體然後都勾運動學較好。

【Constraints限制】:
 自身受到碰撞時, 勾選的位置(Position)、角度(Rotarion)不受力。
 很類似把運動學拆成六個細項來設定,但唯一差別在於仍然算有碰撞
 可以照常執行OnCollision事件。

【Drag空氣阻力】:提高數值可減少落下速度、被撞飛距離。



以上就是比較常用到的重要概念,只要照著實際操作一次就很容易明白了。

另外由於今天分享的是程式技術,
所以這個月預計還是會再寫一篇跟企劃有關的文章,請大家多多支持鼓勵唷!

原文出處:[Unity] 簡單瞭解「Collision碰撞」與「Trigger觸發」 - YawLing的創作 - 巴哈姆特
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|