Unity 物理材質與碰撞偵測

遊戲角色移動時,如果遇到樹木、房屋,岩壁等障礙物,應該無法繼續前進,遊戲設計上可在物件增加碰撞器元件,遊戲角色就被擋住,不會發生穿過物件的不合理情形。物件從空中掉落時,若是沒有加上碰撞器,也會穿過地面而消失在畫面。此外,您也可以將碰撞器設定為觸發器,當玩家走到某個區域或觸碰某個物件時觸發設定的事件。此外,需要發射武器的射擊遊戲(例如子彈、飛彈、雪球等),也可透過碰撞器判定是否擊中目標。

 

碰撞器類型

Unity 提供了多種類型的碰撞器:

Box Collider 方塊碰撞器 - 適用於方形的碰撞偵測(例如建築物、桌椅、汽車等)。

Sphere Collider 球形碰撞器 - 適用於球形的碰撞偵測。

Capsule Collider 膠囊碰撞器 - 適用於樹木、圓柱的碰撞偵測。

Mesh Collider 網格碰撞器 - 適用於形狀複雜的物件,例如製作場景中的一道門,可以讓玩家角色從中間穿越而過。

為物件增加碰撞器時,將會自動依物件調整碰撞器的大小,您也可以隨時透過 Inspector 調整碰撞器的大小與位置。

 

物理材質 ( Physics Material )

物理材質並非外觀上的顏色、透明度等,而是摩擦係數、彈力係數的屬性。透過動畫展示不同物理材質的效果。

預設的物理材質 / 冰塊物理材質

零摩擦係數 (ZeroFriction) 與最大摩擦係數 ( MaxFriction ) 的物理材質設定。

需要彈跳係數高的物件?試試 Rubber 與 Bouncy 物理材質吧!

 

Unity 碰撞偵測

當物件與其他物件碰撞時,可透過 C# 腳本執行指定的動作,以下範例使用遊戲角色碰撞物件。

使用 [ Standard Assets > Characters > ThirdPersonCharacter > Prefabs ] 資料夾的遊戲角色練習碰撞功能。

 

Unity 碰撞偵測

建立一個 C# 腳本並套用到玩家角色,碰撞到物件時輸出訊息到 Console 視窗,如果改為 Destroy ( ) 可以刪除碰撞的物件。

 

Unity 碰撞偵測(特定物件)

實際執行之後,您將會發現當角色碰撞任何物件(甚至包括地板)都會執行,不過在遊戲中大都是碰撞特定物件時執行動作。

以下腳本透過不同的標籤進行判別,執行不同的動作。若碰撞的物件沒有標籤,或者標籤名稱不符合,將不會執行任何動作。

注意!標籤名稱的英文大小寫必須與腳本完全相同。