文章

實現碰撞與觸發事件

在 Unity 中,實現碰撞和觸發事件涉及到使用 Collider 組件以及相關的事件函數。碰撞事件用於檢測物體之間的物理交互,而觸發事件用於檢測物體進入或離開特定區域而不會直接影響物理運動。

1. 碰撞事件(Collisions)

碰撞事件處理物體之間的物理碰撞。要實現碰撞事件,需要使用 ColliderRigidbody 組件。以下是設置和實現碰撞事件的步驟:

步驟 1:設置碰撞體

  1. 創建物體
    • Hierarchy 視窗中創建兩個物體,例如 3D Object > Cube3D Object > Sphere
  2. 添加 Collider 組件
    • 確保兩個物體都附加了 Collider 組件(如 Box ColliderSphere Collider)。這樣它們可以進行碰撞檢測。
  3. 添加 Rigidbody 組件
    • 至少給其中一個物體添加 Rigidbody 組件(通常是動態物體),以便它能夠參與物理計算。

步驟 2:編寫碰撞腳本

  1. 創建新腳本
    • Assets 資料夾中,右鍵選擇 Create > C# Script,創建一個新的 C# 腳本,命名為 CollisionExample
  2. 編寫腳本代碼
    • 打開 CollisionExample 腳本,添加以下代碼來處理碰撞事件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    using UnityEngine;
    
    public class CollisionExample : MonoBehaviour
    {
        void OnCollisionEnter(Collision collision)
        {
            // 當物體碰撞時被調用
            Debug.Log("Collision Detected with: " + collision.gameObject.name);
        }
    
        void OnCollisionStay(Collision collision)
        {
            // 當物體持續碰撞時被調用
            Debug.Log("Colliding with: " + collision.gameObject.name);
        }
    
        void OnCollisionExit(Collision collision)
        {
            // 當物體停止碰撞時被調用
            Debug.Log("Stopped Colliding with: " + collision.gameObject.name);
        }
    }
    
  3. 附加腳本
    • Hierarchy 視窗中,選擇其中一個物體(如 Cube),然後在 Inspector 視窗中將 CollisionExample 腳本拖放到該物體上。

2. 觸發事件(Triggers)

觸發事件處理物體進入或離開觸發器區域,並不會直接影響物理運動。要實現觸發事件,需要設置觸發器(Trigger)並編寫處理腳本。

步驟 1:設置觸發器

  1. 創建物體
    • Hierarchy 視窗中創建一個觸發器物體,例如 3D Object > Cube
  2. 添加 Collider 組件
    • 選擇該物體,並在 Inspector 視窗中添加 Collider 組件(如 Box Collider)。
  3. 設置為觸發器
    • Collider 組件的屬性中,勾選 Is Trigger 選項。這樣,該 Collider 就成為觸發器。

步驟 2:編寫觸發器腳本

  1. 創建新腳本
    • Assets 資料夾中,右鍵選擇 Create > C# Script,創建一個新的 C# 腳本,命名為 TriggerExample
  2. 編寫腳本代碼
    • 打開 TriggerExample 腳本,添加以下代碼來處理觸發事件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    using UnityEngine;
    
    public class TriggerExample : MonoBehaviour
    {
        void OnTriggerEnter(Collider other)
        {
            // 當其他物體進入觸發器區域時被調用
            Debug.Log("Entered Trigger: " + other.gameObject.name);
        }
    
        void OnTriggerStay(Collider other)
        {
            // 當其他物體在觸發器區域內持續存在時被調用
            Debug.Log("Staying in Trigger: " + other.gameObject.name);
        }
    
        void OnTriggerExit(Collider other)
        {
            // 當其他物體離開觸發器區域時被調用
            Debug.Log("Exited Trigger: " + other.gameObject.name);
        }
    }
    
  3. 附加腳本
    • Hierarchy 視窗中,選擇包含觸發器 Collider 的物體(如 Cube),並在 Inspector 視窗中將 TriggerExample 腳本拖放到該物體上。

3. 測試和調整

  1. 測試碰撞
    • 點擊 Play 按鈕,將另一個物體(如 Sphere)移動到觸發器區域,觀察 Console 視窗中的日誌輸出,確認碰撞事件是否被正確觸發。
  2. 測試觸發器
    • 同樣,移動物體到觸發器區域,觀察 Console 視窗中的日誌輸出,確認觸發事件是否被正確觸發。
  3. 調整參數
    • 根據需要調整物體的 Collider 大小、位置和其他參數,以確保事件觸發的準確性。

4. 小結

碰撞和觸發事件是 Unity 中重要的物理交互方式。碰撞事件用於檢測物體之間的物理碰撞,而觸發事件則用於檢測物體進入或離開特定區域而不會直接影響物理運動。通過設置 Collider 和編寫相關腳本,你可以實現各種遊戲功能,如物理互動、事件觸發和範圍檢測等。

本文章以 CC BY 4.0 授權