Unity 3D觸發器(Trigger)

在 Unity 3D 中,檢測碰撞發生的方式有兩種,一種是利用碰撞體,另一種則是利用觸發器(Trigger)。

觸發器用來觸發事件。在很多遊戲引擎或工具中都有觸發器。

例如,在角色扮演遊戲裏,玩家走到一個地方會發生出現 Boss 的事件,就可以用觸發器來實現。

當綁定了碰撞體的遊戲對象進入觸發器區域時,會運行觸發器對象上的 OnTriggerEnter 函數,同時需要在檢視面板中的碰撞體組件中勾選 IsTrigger 複選框,如下圖所示。








圖片


觸發信息檢測使用以下 3 個函數:

  • MonoBehaviour.OnTriggerEnter(Collider collider),當進入觸發器時觸發。

  • MonoBehaviour.OnTriggerExit(Collider collider),當退出觸發器時觸發。

  • MonoBehaviour.OnTriggerStay(Collider collider),當逗留在觸發器中時觸發。


Unity 3D 中的碰撞體和觸發器的區別在於:碰撞體是觸發器的載體,而觸發器只是碰撞體的一個屬性。

如果既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動,或者要檢測一個物體是否經過空間中的某個區域,這時就可以用到觸發器。例如,碰撞體適合模擬汽車被撞飛、皮球掉在地上又彈起的效果,而觸發器適合模擬人站在靠近門的位置時門自動打開的效果。



實踐案例:碰撞消失的立方體

案例構思

碰撞體需要和剛體一起來使碰撞發生,如果兩個剛體撞在一起,物理引擎不會計算碰撞,除非它們包含一個碰撞體組件。

沒有碰撞體的剛體會在物理模擬中相互穿透。本案例旨在通過小球碰撞後產生消失的動作確認碰撞的發生。


案例設計

本案例在 Unity 3D 內創建一個簡單的三維場景,場景內放有 Sphere 和 Plane,Plane 用於充當地面,Sphere 用於做碰撞測試,當人物與 Sphere 距離足夠近時發生碰撞,小球消失,如下圖所示。


圖片

案例實施

步驟 1):創建一個平面(0,0,0)和一個小球(0,1,0),使小球置於平面上方,如上圖所示。

步驟 2):執行 Assets→Import Package→Customer Package 命令添加第一人稱資源,如下圖所示。




圖片


步驟 3):選中第一人稱資源後單擊 Import 按鈕導入,如下圖所示。



圖片


步驟 4):在 Project 視圖中搜索 first person controller,將其添加到 Hierarchy 視圖中,並擺放到平面上合適的位置,如下圖所示。



圖片


步驟 5):因爲第一人稱資源自帶攝像機,因此需要關掉場景中的攝像機。

步驟 6):選中 Cube,爲 Cube 對象添加 Box Collider,並勾選 Is Trigger 屬性,如下圖所示。





圖片


步驟 7):編寫腳本 Colliders.cs,代碼如下。

using UnityEngine;using System.Collections;public class Colliders:MonoBehaviour{    void OnTriggerEnter(Collider other){        if(other.tag=="Pickup"){            Destroy(other.gameObject);        }    }}

步驟 8):將 Colliders 腳本鏈接到 first person controller 上。


步驟 9):爲 Cube 添加標籤 Pickup。

步驟 10):單擊 Play 按鈕運行測試,可以發現,當人物靠近立方體小盒後,小盒即刻消失,運行效果如下圖所示。





圖片


圖片



圖片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章