-
碰撞體(Collider)是遊戲物件的元件之一
-
它可以讓所依附的遊戲物件
對其它碰撞體產生碰撞行為
-
而那些遊戲物件必須有剛體(Rigidbody)元件
-
碰撞體有不同的形狀與類別
-
在場景視圖內它們會以綠色外框形狀顯示
-
它們有這些主要的形狀
球形, 柱形和方形
-
如果需要更複雜的形狀有兩個方法
-
你可以用多個幾何物件
將它們的碰撞體放入不同的物件
-
最後在階層裡結合成為新的碰撞結構
-
舉例來說, 這個工作檯由許多不同的
碰撞體放在各部位組成一個碰撞結構
-
另外一個方式是使用網格碰撞體
-
網格碰撞體會和網格的形狀相同
-
右邊的這個工作檯並沒有碰撞體
因為它使用了網格碰撞體
-
我們不建議使用網格碰撞體
因為網格碰撞體是依照網格形狀所產生
-
所以可能會造成太複雜的碰撞結構
進而影響遊戲的效能
-
這也是為甚麼通常
我們會使用組合式碰撞體的原因
-
此外還有第三種方式
來產生幾何形狀碰撞體
-
先簡化物件的模型
然後將模型製作成網格碰撞體即可
-
在這個範例裡我們所用的是
一個複雜的機器手臂
-
它擁有很複雜的網格
但我們並不希望它的網格碰撞體如此複雜
-
所以我們建立了第二組簡化的網格模型
然後用這些簡化的模型製作網格碰撞體
-
像是這個機器爪的網格
比我們為它產生的網格碰撞體還要複雜
-
這是用兩個FBX檔來完成
-
一個是原始的機器手臂
和簡化過的幾何模型
-
然後我們在每一個子物件裡
都加入了網格碰撞體
-
然後將簡化過的幾何模型
拖曳到對應的網格碰撞體的網格(Mesh)
-
這樣一來,我們就可以達到碰撞的需求
同時也避免效能的問題
-
當碰撞在遊戲引擎裡發生時
碰撞體會呼叫OnCollisionEnter事件
-
在這個場景我們的球體物件
附有一個球形碰撞體和剛體
-
剛體有重量(Mass)和重力(Gravity)屬性
-
當我播放時, 球體物件會掉落
並碰到其他物件
-
我們的方體物件附有一個方形碰撞體
-
而在掉落的球體上我們加入了這個程式腳本
-
這個程式腳本進行了三個碰撞事件的檢查
-
碰撞進入(OnCollisionEnter)
-
碰撞持續(OnCollisionStay)
-
和碰撞結束(OnCollisionExit)
-
當這些事件被呼叫時我用Debug.Log語法
在控制台(Console)寫入資訊
-
提示進入、停留和離開的訊息
-
所以當我們檢視控制台內容時
-
你會先看到碰撞進入
接下來碰撞持續了一陣子, 最後碰撞結束
-
如果我們將遊戲暫停
我們可以詳細的檢視這個範例
-
當我單步執行每一幀
-
你可以看到當碰撞開始時
控制台顯示了碰撞進入的訊息
-
代表OnCollisionEnter事件剛被呼叫
-
當我繼續後換OnCollisionStay被呼叫
-
控制台顯示了碰撞持續的訊息
因為兩個碰撞體還保持在碰撞的階段
-
直到兩個碰撞體不再有碰撞行為
OnCollisionExit事件就會被呼叫
-
要注意的是,如果要觸發碰撞(OnCollision)
兩個碰撞的物件之中一個必須有剛體元件