完成了最基本的移動,是不是腦細胞又少了一些呢?這只是一開始而已哦,大家繼續努力
Collider(碰撞器)在 Unity 中是用來處理物體之間碰撞和觸發事件的組件之一。它是用於確定物體之間是否發生碰撞,以及當碰撞發生時應該採取什麼行動的核心組件之一。也是製作遊戲互動的主要方法,預設的情況使用 Unity 建立的物件將會附帶碰撞器,通常遊戲角色碰到擁有碰撞器的物件時,將被擋下而無法前進,透過腳本可以設定物件碰撞時的互動行為。
在 Unity 中,常見的 Collider 類型包括:
- Box Collider(盒碰撞器):描述物體的矩形碰撞區域,通常用於方形或盒狀物體。
- Sphere Collider(球體碰撞器):描述物體的球形碰撞區域,通常用於球體或圓形物體。
- Capsule Collider(膠囊碰撞器):描述物體的膠囊形狀碰撞區域,通常用於角色控制器或柱狀物體。
- Mesh Collider(網格碰撞器):描述物體的網格模型形狀碰撞區域,通常用於複雜形狀的物體,但相對較耗性能。
- Terrain Collider(地形碰撞器):描述 Unity 地形物件的碰撞區域。
Collider 碰撞器在 Unity 中通常用於以下情況:
- 碰撞檢測:用於確定物體之間是否發生碰撞。這在遊戲中很常見,比如角色和牆壁的碰撞、子彈和敵人的碰撞等。
- 觸發事件:當物體進入或離開碰撞器的範圍時觸發事件。例如,玩家角色進入觸發區域可以觸發開門動畫、觸發關卡事件等。
- 物理模擬:碰撞器可以與物理引擎結合使用,用於模擬物體之間的碰撞行為,例如彈跳、反彈、摩擦等。
☆☆這個情況不用寫程式碼就可以了
- 物體檢測:用於將物體分為碰撞和非碰撞區域。這在設計關卡、障礙物或者地形時非常有用,可以確保玩家和物體之間的互動正確。
Collider通常可以玩出三種情況,來帶各位玩一下~
Collider
v.s.Collider+Trigger
v.s.None
我們新建一個場景
,可以叫 ColliderAndTrigger

我們一樣準備一張椅子需帶有移動的腳本(Scripts),一個地板。先確認他可以在地板走動。

建立三個方體,先確認他預設都有Box Collider的組件~~
第一種。只有Collider
我們新創一個腳本,叫做ColliderGreen
好了,然後先把腳本丟到綠方塊上

然後打開腳本,我們來編輯囉~

又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作
(((((也太多方法要背了吧,對阿T T
private void OnCollisionEnter(Collision GreenCube) //當兩個物體碰到當下,執行乙次
{
if (GreenCube != null)
{
Debug.Log("碰到了");
}
}
解釋一下上面在說什麼好了
OnCollisionEnter
private void OnCollisionEnter(Collision GreenCube)
:這是一個私有方法,表示它只能在本類中被調用。OnCollisionEnter
是 Unity 的一個事件函式,用來處理物體之間的碰撞事件。當兩個物體碰撞時,這個函式會被自動調用,並且傳遞一個 Collision 參數(在我的程式碼中命名為GreenCube
)。if (GreenCube != null)
:是一個條件判斷語句,用來確保傳遞的 Collision 參數不為空。在 Unity 的碰撞事件中,通常會傳遞一個有效的 Collision 物件,但為了防止意外,這裡進行了一個非空判斷。Debug.Log("碰到了")
:如果碰撞事件有效(即 Collision 參數不為空),則在控制台中輸出一條日誌信息,顯示 "碰到了"。這樣可以用來測試碰撞事件是否正確觸發,或者執行一些碰撞後的操作。
OnCollisionEnter
OnCollisionExit
OnCollisionStay
跟他同系列的方法,都是 Unity 中用於處理物體之間碰撞事件的特殊方法。讓我來逐一解釋:
- OnCollisionEnter(Collision collision): 當物體碰撞開始時,
OnCollisionEnter
會在每個涉及碰撞的物體上調用一次。它接收一個 Collision 參數,該參數包含碰撞的詳細信息,例如碰撞點、碰撞法向量等。通常用於在碰撞開始時執行一些操作,比如觸發特效、播放聲音、計分等。 - OnCollisionExit(Collision collision): 當物體碰撞結束時,
OnCollisionExit
會在每個涉及碰撞的物體上調用一次。它也接收一個 Collision 參數,用於處理碰撞結束時的操作。例如,停止播放特效、重置計分等。 - OnCollisionStay(Collision collision): 當物體持續碰撞時,
OnCollisionStay
會在每個涉及碰撞的物體上每一幀都被調用。它同樣接收一個 Collision 參數,用於處理持續碰撞期間的操作。這個方法通常用於執行物體間持續性碰撞時的一些行為,例如持續損傷、持續推力等。
可以Try try 看以上方法~

第二種。有Collider而且裡面帶有is Trigger
同上,又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作
再新創一個腳本,叫做TriggerRed
好了,然後一樣把腳本丟到物件上(紅方塊)
打開腳本寫腳本

private void OnTriggerEnter(Collider other)
{
if (other != null)
{
Debug.Log("觸發了> <");
}
}
解釋一下上面的東東
- private void OnTriggerEnter(Collider other):處理物件進入觸發器範圍的事件。這個函式有一個參數
other
,代表進入觸發器範圍的物件的碰撞器(Collider)。 - if (other != null):是一個條件判斷語句,確定進入觸發器範圍的物件不是空的。如果進入觸發器範圍的物件確實存在,就會執行後面的程式碼。
- Debug.Log("觸發了> <");:這行程式碼的作用是在控制台輸出一條訊息,表示物件進入了觸發器的範圍。訊息內容是 "觸發了> <",你可以根據需要修改這個訊息的內容。
OnTriggerEnter
OnTriggerExit
OnTriggerStay
跟他同系列的方法,都是 Unity 中用於處理物體之間觸發事件的特殊方法。讓我來逐一解釋:
- OnTriggerEnter(Collider other)
- 當有其他碰撞器(Collider)進入這個物件的觸發器範圍時,會觸發這個方法。
- 參數 other 是進入觸發器範圍的碰撞器,可以用來做進一步的處理,比如確認進入的是哪個物件或做碰撞相應的處理。
- 通常用於偵測物體進入觸發器範圍後的事件處理,比如啟動某個特定功能或執行特定的行為。
- 觸發器區域:當物體進入觸發器範圍時,觸發某個事件,如啟動一段對話、觸發敵人出現等。
- OnTriggerExit(Collider other)
- 當其他碰撞器從這個物件的觸發器範圍中離開時,會觸發這個方法。
- 參數 other 是離開觸發器範圍的碰撞器,可以用來做進一步的處理,比如確認離開的是哪個物件或做相應的清理工作。
- 通常用於偵測物體離開觸發器範圍後的事件處理,比如停止某個功能或執行相應的清理。
- 觸發器區域:當物體離開觸發器範圍時,觸發某個事件,如關閉對話框、隱藏敵人等。
- OnTriggerStay(Collider other)
- 當其他碰撞器持續保持在這個物件的觸發器範圍內時,會持續觸發這個方法。
- 參數 other 是持續保持在觸發器範圍內的碰撞器,可以用來做進一步的處理,比如執行持續的觸發事件或持續的處理工作。
- 通常用於偵測物體持續在觸發器範圍內時的事件處理,比如持續執行某個特定功能或持續執行相應的行為。
- 觸發器區域:持續偵測物體保持在觸發器範圍內,觸發某個事件,如在區域內持續收集物品、持續受到特定效果等。
第三種。什麼都沒有Collider也沒有
直接把黃方塊的Collider拔掉看看
三種試完應該有點知道他們的差別了吧
稍微在整理一下
當你在Unity中設置Collider時,有兩種主要的設置選項:普通Collider和Is Trigger。這兩者在物理交互和事件觸發上有不同的作用:
- 普通Collider:這種Collider會將物體視為實體,也就是它會阻止其他物體通過它,並且會觸發物理碰撞事件(例如OnCollisionEnter、OnCollisionStay、OnCollisionExit)。
- Is Trigger:這種Collider則不會視為實體,而是設置為觸發器,即當其他物體進入這個Collider的範圍時,會觸發觸發器事件(例如OnTriggerEnter、OnTriggerStay、OnTriggerExit)。在這種情況下,物體可以穿過這種Collider,而不會發生物理碰撞反應。
碰撞事件處理是 Unity 中物理模擬的重要部分,可以實現各種有趣的遊戲效果和互動。
小結一下
我會把有Collider的物體,說Collider是他的靈魂啦,說mesh是他的肉體啦
(我們來做點練習題,讓大家更懂一點)