C語言中文網 目錄

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 按鈕運行測試,可以發現,當人物靠近立方體小盒后,小盒即刻消失,運行效果如下圖所示。

碰撞發生前

發生碰撞后小盒消失

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo