完成了最基本的移動,是不是腦細胞又少了一些呢?這只是一開始而已哦,大家繼續努力
Collider(碰撞器)在 Unity 中是用來處理物體之間碰撞和觸發事件的組件之一。它是用於確定物體之間是否發生碰撞,以及當碰撞發生時應該採取什麼行動的核心組件之一。也是製作遊戲互動的主要方法,預設的情況使用 Unity 建立的物件將會附帶碰撞器,通常遊戲角色碰到擁有碰撞器的物件時,將被擋下而無法前進,透過腳本可以設定物件碰撞時的互動行為。
在 Unity 中,常見的 Collider 類型包括:
Collider 碰撞器在 Unity 中通常用於以下情況:
☆☆這個情況不用寫程式碼就可以了
Collider通常可以玩出三種情況,來帶各位玩一下~
Collider
v.s.Collider+Trigger
v.s.None
我們新建一個場景
,可以叫 ColliderAndTrigger
我們一樣準備一張椅子需帶有移動的腳本(Scripts),一個地板。先確認他可以在地板走動。
建立三個方體,先確認他預設都有Box Collider的組件~~
我們新創一個腳本,叫做ColliderGreen
好了,然後先把腳本丟到綠方塊上
然後打開腳本,我們來編輯囉~
又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作
(((((也太多方法要背了吧,對阿T T
private void OnCollisionEnter(Collision GreenCube) //當兩個物體碰到當下,執行乙次
{
if (GreenCube != null)
{
Debug.Log("碰到了");
}
}
解釋一下上面在說什麼好了
private void OnCollisionEnter(Collision GreenCube)
:這是一個私有方法,表示它只能在本類中被調用。OnCollisionEnter
是 Unity 的一個事件函式,用來處理物體之間的碰撞事件。當兩個物體碰撞時,這個函式會被自動調用,並且傳遞一個 Collision 參數(在我的程式碼中命名為 GreenCube
)。if (GreenCube != null)
:是一個條件判斷語句,用來確保傳遞的 Collision 參數不為空。在 Unity 的碰撞事件中,通常會傳遞一個有效的 Collision 物件,但為了防止意外,這裡進行了一個非空判斷。Debug.Log("碰到了")
:如果碰撞事件有效(即 Collision 參數不為空),則在控制台中輸出一條日誌信息,顯示 "碰到了"。這樣可以用來測試碰撞事件是否正確觸發,或者執行一些碰撞後的操作。跟他同系列的方法,都是 Unity 中用於處理物體之間碰撞事件的特殊方法。讓我來逐一解釋:
OnCollisionEnter
會在每個涉及碰撞的物體上調用一次。它接收一個 Collision 參數,該參數包含碰撞的詳細信息,例如碰撞點、碰撞法向量等。通常用於在碰撞開始時執行一些操作,比如觸發特效、播放聲音、計分等。OnCollisionExit
會在每個涉及碰撞的物體上調用一次。它也接收一個 Collision 參數,用於處理碰撞結束時的操作。例如,停止播放特效、重置計分等。OnCollisionStay
會在每個涉及碰撞的物體上每一幀都被調用。它同樣接收一個 Collision 參數,用於處理持續碰撞期間的操作。這個方法通常用於執行物體間持續性碰撞時的一些行為,例如持續損傷、持續推力等。可以Try try 看以上方法~
同上,又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作
再新創一個腳本,叫做TriggerRed
好了,然後一樣把腳本丟到物件上(紅方塊)
打開腳本寫腳本
private void OnTriggerEnter(Collider other)
{
if (other != null)
{
Debug.Log("觸發了> <");
}
}
解釋一下上面的東東
other
,代表進入觸發器範圍的物件的碰撞器(Collider)。跟他同系列的方法,都是 Unity 中用於處理物體之間觸發事件的特殊方法。讓我來逐一解釋:
直接把黃方塊的Collider拔掉看看
三種試完應該有點知道他們的差別了吧
稍微在整理一下
當你在Unity中設置Collider時,有兩種主要的設置選項:普通Collider和Is Trigger。這兩者在物理交互和事件觸發上有不同的作用:
碰撞事件處理是 Unity 中物理模擬的重要部分,可以實現各種有趣的遊戲效果和互動。
我會把有Collider的物體,說Collider是他的靈魂啦,說mesh是他的肉體啦
(我們來做點練習題,讓大家更懂一點)