2024-05-01|閱讀時間 ‧ 約 30 分鐘

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

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

    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

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


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

    第一種。只有Collider

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


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

    又是一個特殊方法~~,而且這個方法不用在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 看以上方法~


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

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

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

    打開腳本寫腳本

    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是他的肉體啦


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

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.