2024 虛擬實境 x 人因設計 07unity碰撞器Collider&Trigger-1

閱讀時間約 9 分鐘

完成了最基本的移動,是不是腦細胞又少了一些呢?這只是一開始而已哦,大家繼續努力

Collider(碰撞器)在 Unity 中是用來處理物體之間碰撞和觸發事件的組件之一。它是用於確定物體之間是否發生碰撞,以及當碰撞發生時應該採取什麼行動的核心組件之一。也是製作遊戲互動的主要方法,預設的情況使用 Unity 建立的物件將會附帶碰撞器,通常遊戲角色碰到擁有碰撞器的物件時,將被擋下而無法前進,透過腳本可以設定物件碰撞時的互動行為。

在 Unity 中,常見的 Collider 類型包括:

  1. Box Collider(盒碰撞器):描述物體的矩形碰撞區域,通常用於方形或盒狀物體。
  2. Sphere Collider(球體碰撞器):描述物體的球形碰撞區域,通常用於球體或圓形物體
  3. Capsule Collider(膠囊碰撞器):描述物體的膠囊形狀碰撞區域,通常用於角色控制器或柱狀物體。
  4. Mesh Collider(網格碰撞器):描述物體的網格模型形狀碰撞區域,通常用於複雜形狀的物體,但相對較耗性能。
  5. Terrain Collider(地形碰撞器):描述 Unity 地形物件的碰撞區域。


Collider 碰撞器在 Unity 中通常用於以下情況:

  1. 碰撞檢測:用於確定物體之間是否發生碰撞。這在遊戲中很常見,比如角色和牆壁的碰撞、子彈和敵人的碰撞等。
  2. 觸發事件:當物體進入或離開碰撞器的範圍時觸發事件。例如,玩家角色進入觸發區域可以觸發開門動畫、觸發關卡事件等。
  3. 物理模擬:碰撞器可以與物理引擎結合使用,用於模擬物體之間的碰撞行為,例如彈跳、反彈、摩擦等。 ☆☆這個情況不用寫程式碼就可以了
  4. 物體檢測:用於將物體分為碰撞和非碰撞區域。這在設計關卡、障礙物或者地形時非常有用,可以確保玩家和物體之間的互動正確。

Collider通常可以玩出三種情況,來帶各位玩一下~

Colliderv.s.Collider+Triggerv.s.None



我們新建一個場景,可以叫 ColliderAndTrigger

raw-image

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


raw-image

建立三個方體,先確認他預設都有Box Collider的組件~~

第一種。只有Collider

我們新創一個腳本,叫做ColliderGreen 好了,然後先把腳本丟到綠方塊上

raw-image


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

raw-image

又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作

(((((也太多方法要背了吧,對阿T T

private void OnCollisionEnter(Collision GreenCube) //當兩個物體碰到當下,執行乙次

{

if (GreenCube != null)

{

Debug.Log("碰到了");

}

}

解釋一下上面在說什麼好了

OnCollisionEnter

  1. private void OnCollisionEnter(Collision GreenCube):這是一個私有方法,表示它只能在本類中被調用。OnCollisionEnter 是 Unity 的一個事件函式,用來處理物體之間的碰撞事件。當兩個物體碰撞時,這個函式會被自動調用,並且傳遞一個 Collision 參數(在我的程式碼中命名為 GreenCube)。
  2. if (GreenCube != null):是一個條件判斷語句,用來確保傳遞的 Collision 參數不為空。在 Unity 的碰撞事件中,通常會傳遞一個有效的 Collision 物件,但為了防止意外,這裡進行了一個非空判斷。
  3. Debug.Log("碰到了"):如果碰撞事件有效(即 Collision 參數不為空),則在控制台中輸出一條日誌信息,顯示 "碰到了"。這樣可以用來測試碰撞事件是否正確觸發,或者執行一些碰撞後的操作。


OnCollisionEnter

OnCollisionExit

OnCollisionStay

跟他同系列的方法,都是 Unity 中用於處理物體之間碰撞事件的特殊方法。讓我來逐一解釋:

  1. OnCollisionEnter(Collision collision): 當物體碰撞開始時,OnCollisionEnter 會在每個涉及碰撞的物體上調用一次。它接收一個 Collision 參數,該參數包含碰撞的詳細信息,例如碰撞點、碰撞法向量等。通常用於在碰撞開始時執行一些操作,比如觸發特效、播放聲音、計分等。
  2. OnCollisionExit(Collision collision): 當物體碰撞結束時,OnCollisionExit 會在每個涉及碰撞的物體上調用一次。它也接收一個 Collision 參數,用於處理碰撞結束時的操作。例如,停止播放特效、重置計分等。
  3. OnCollisionStay(Collision collision): 當物體持續碰撞時,OnCollisionStay 會在每個涉及碰撞的物體上每一幀都被調用。它同樣接收一個 Collision 參數,用於處理持續碰撞期間的操作。這個方法通常用於執行物體間持續性碰撞時的一些行為,例如持續損傷、持續推力等。

可以Try try 看以上方法~

raw-image


第二種。有Collider而且裡面帶有is Trigger

同上,又是一個特殊方法~~,而且這個方法不用在Update裡面就會自己運作

再新創一個腳本,叫做TriggerRed 好了,然後一樣把腳本丟到物件上(紅方塊)

打開腳本寫腳本

raw-image

private void OnTriggerEnter(Collider other)

{

if (other != null)

{

Debug.Log("觸發了> <");

}

}

解釋一下上面的東東

  1. private void OnTriggerEnter(Collider other):處理物件進入觸發器範圍的事件。這個函式有一個參數 other,代表進入觸發器範圍的物件的碰撞器(Collider)。
  2. if (other != null):是一個條件判斷語句,確定進入觸發器範圍的物件不是空的。如果進入觸發器範圍的物件確實存在,就會執行後面的程式碼。
  3. Debug.Log("觸發了> <");:這行程式碼的作用是在控制台輸出一條訊息,表示物件進入了觸發器的範圍。訊息內容是 "觸發了> <",你可以根據需要修改這個訊息的內容。


OnTriggerEnter

OnTriggerExit

OnTriggerStay

跟他同系列的方法,都是 Unity 中用於處理物體之間觸發事件的特殊方法。讓我來逐一解釋:

  1. OnTriggerEnter(Collider other)
    • 當有其他碰撞器(Collider)進入這個物件的觸發器範圍時,會觸發這個方法。
    • 參數 other 是進入觸發器範圍的碰撞器,可以用來做進一步的處理,比如確認進入的是哪個物件或做碰撞相應的處理。
    • 通常用於偵測物體進入觸發器範圍後的事件處理,比如啟動某個特定功能或執行特定的行為。
    • 觸發器區域:當物體進入觸發器範圍時,觸發某個事件,如啟動一段對話、觸發敵人出現等。
  2. OnTriggerExit(Collider other)
    • 當其他碰撞器從這個物件的觸發器範圍中離開時,會觸發這個方法。
    • 參數 other 是離開觸發器範圍的碰撞器,可以用來做進一步的處理,比如確認離開的是哪個物件或做相應的清理工作。
    • 通常用於偵測物體離開觸發器範圍後的事件處理,比如停止某個功能或執行相應的清理。
    • 觸發器區域:當物體離開觸發器範圍時,觸發某個事件,如關閉對話框、隱藏敵人等。
  3. OnTriggerStay(Collider other)
    • 當其他碰撞器持續保持在這個物件的觸發器範圍內時,會持續觸發這個方法。
    • 參數 other 是持續保持在觸發器範圍內的碰撞器,可以用來做進一步的處理,比如執行持續的觸發事件或持續的處理工作。
    • 通常用於偵測物體持續在觸發器範圍內時的事件處理,比如持續執行某個特定功能或持續執行相應的行為。
    • 觸發器區域:持續偵測物體保持在觸發器範圍內,觸發某個事件,如在區域內持續收集物品、持續受到特定效果等。

第三種。什麼都沒有Collider也沒有

直接把黃方塊的Collider拔掉看看



三種試完應該有點知道他們的差別了吧

稍微在整理一下

當你在Unity中設置Collider時,有兩種主要的設置選項:普通Collider和Is Trigger。這兩者在物理交互和事件觸發上有不同的作用:

  1. 普通Collider:這種Collider會將物體視為實體,也就是它會阻止其他物體通過它,並且會觸發物理碰撞事件(例如OnCollisionEnter、OnCollisionStay、OnCollisionExit)。
  2. Is Trigger:這種Collider則不會視為實體,而是設置為觸發器,即當其他物體進入這個Collider的範圍時,會觸發觸發器事件(例如OnTriggerEnter、OnTriggerStay、OnTriggerExit)。在這種情況下,物體可以穿過這種Collider,而不會發生物理碰撞反應。


碰撞事件處理是 Unity 中物理模擬的重要部分,可以實現各種有趣的遊戲效果和互動。

小結一下

我會把有Collider的物體,說Collider是他的靈魂啦,說mesh是他的肉體啦


(我們來做點練習題,讓大家更懂一點)

    avatar-img
    4會員
    20內容數
    Gavin Hsieh ㄉ基地
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
    Thumbnail
    隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
    Thumbnail
    徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
    Thumbnail
    隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap