0:00:00.000,0:00:02.084 碰撞體(Collider)是遊戲物件的元件之一 0:00:02.084,0:00:05.585 它可以讓所依附的遊戲物件[br]對其它碰撞體產生碰撞行為 0:00:05.585,0:00:09.585 而那些遊戲物件必須有剛體(Rigidbody)元件 0:00:10.209,0:00:12.828 碰撞體有不同的形狀與類別 0:00:12.828,0:00:16.235 在場景視圖內它們會以綠色外框形狀顯示 0:00:16.459,0:00:31.062 它們有這些主要的形狀[br]球形, 柱形和方形 0:00:32.663,0:00:35.273 如果需要更複雜的形狀有兩個方法 0:00:35.474,0:00:39.708 你可以用多個幾何物件[br]將它們的碰撞體放入不同的物件 0:00:39.708,0:00:42.852 最後在階層裡結合成為新的碰撞結構 0:00:42.852,0:00:50.682 舉例來說, 這個工作檯由許多不同的[br]碰撞體放在各部位組成一個碰撞結構 0:00:50.782,0:00:54.156 另外一個方式是使用網格碰撞體 0:00:54.156,0:00:57.686 網格碰撞體會和網格的形狀相同 0:00:58.186,0:01:02.620 右邊的這個工作檯並沒有碰撞體[br]因為它使用了網格碰撞體 0:01:02.620,0:01:08.620 我們不建議使用網格碰撞體[br]因為網格碰撞體是依照網格形狀所產生 0:01:08.620,0:01:15.611 所以可能會造成太複雜的碰撞結構[br]進而影響遊戲的效能 0:01:15.794,0:01:19.693 這也是為甚麼通常[br]我們會使用組合式碰撞體的原因 0:01:20.076,0:01:24.463 此外還有第三種方式[br]來產生幾何形狀碰撞體 0:01:24.463,0:01:29.664 先簡化物件的模型[br]然後將模型製作成網格碰撞體即可 0:01:29.997,0:01:33.997 在這個範例裡我們所用的是[br]一個複雜的機器手臂 0:01:34.331,0:01:39.929 它擁有很複雜的網格[br]但我們並不希望它的網格碰撞體如此複雜 0:01:40.162,0:01:48.279 所以我們建立了第二組簡化的網格模型[br]然後用這些簡化的模型製作網格碰撞體 0:01:48.279,0:01:53.275 像是這個機器爪的網格[br]比我們為它產生的網格碰撞體還要複雜 0:01:53.625,0:01:55.547 這是用兩個FBX檔來完成 0:01:55.547,0:02:01.557 一個是原始的機器手臂[br]和簡化過的幾何模型 0:02:01.742,0:02:05.591 然後我們在每一個子物件裡[br]都加入了網格碰撞體 0:02:05.591,0:02:09.121 然後將簡化過的幾何模型[br]拖曳到對應的網格碰撞體的網格(Mesh) 0:02:09.206,0:02:14.935 這樣一來,我們就可以達到碰撞的需求[br]同時也避免效能的問題 0:02:15.602,0:02:22.024 當碰撞在遊戲引擎裡發生時[br]碰撞體會呼叫OnCollisionEnter事件 0:02:22.307,0:02:28.928 在這個場景我們的球體物件[br]附有一個球形碰撞體和剛體 0:02:29.061,0:02:31.695 剛體有重量(Mass)和重力(Gravity)屬性 0:02:31.961,0:02:36.108 當我播放時, 球體物件會掉落[br]並碰到其他物件 0:02:36.608,0:02:39.725 我們的方體物件附有一個方形碰撞體 0:02:43.061,0:02:47.334 而在掉落的球體上我們加入了這個程式腳本 0:02:47.733,0:02:50.383 這個程式腳本進行了三個碰撞事件的檢查 0:02:50.383,0:02:51.900 碰撞進入(OnCollisionEnter) 0:02:51.900,0:02:53.417 碰撞持續(OnCollisionStay) 0:02:53.417,0:02:54.935 和碰撞結束(OnCollisionExit) 0:02:55.135,0:02:59.418 當這些事件被呼叫時我用Debug.Log語法[br]在控制台(Console)寫入資訊 0:02:59.568,0:03:05.805 提示進入、停留和離開的訊息 0:03:09.809,0:03:11.936 所以當我們檢視控制台內容時 0:03:11.936,0:03:16.946 你會先看到碰撞進入[br]接下來碰撞持續了一陣子, 最後碰撞結束 0:03:17.162,0:03:21.635 如果我們將遊戲暫停[br]我們可以詳細的檢視這個範例 0:03:22.135,0:03:24.431 當我單步執行每一幀 0:03:25.682,0:03:30.315 你可以看到當碰撞開始時[br]控制台顯示了碰撞進入的訊息 0:03:30.315,0:03:32.315 代表OnCollisionEnter事件剛被呼叫 0:03:32.815,0:03:37.259 當我繼續後換OnCollisionStay被呼叫 0:03:37.259,0:03:43.344 控制台顯示了碰撞持續的訊息[br]因為兩個碰撞體還保持在碰撞的階段 0:03:43.344,0:03:51.925 直到兩個碰撞體不再有碰撞行為[br]OnCollisionExit事件就會被呼叫 0:03:53.142,0:04:00.016 要注意的是,如果要觸發碰撞(OnCollision)[br]兩個碰撞的物件之中一個必須有剛體元件