• Unity3d碰撞檢測中碰(pèng)撞器與觸發器的概念

    2018/3/5      點擊:

    要產生(shēng)碰撞必須為(wéi)遊戲對象添加剛體(Rigidbody)和(hé)碰撞器,剛體可以讓物體在物理影響下運(yùn)動。碰撞體是物理組件的一類,它要與剛體一起添加到遊戲對象上才能(néng)觸發碰撞。如果兩(liǎng)個剛體相互(hù)撞在一起,除非兩個(gè)對象有碰撞體時物理引擎才會計算(suàn)碰撞,在物理模擬(nǐ)中,沒有碰撞體的剛體會彼此相互穿過。

    物體發生碰撞的必要條件
    兩個物體都必須(xū)帶有碰撞器(Collider),其中一個物體還必(bì)須帶有Rigidbody剛體。
    在unity3d中,能檢測碰撞發生(shēng)的方式有兩種,一種是(shì)利用碰撞器,另一種則是利用觸發(fā)器。
    碰撞器:一群組件,它包含了很多種類,比如:Box Collider(盒碰撞體),Mesh Collider(網格碰撞體)等,這些碰撞(zhuàng)器應用(yòng)的(de)場合不同,但都必須加到(dào)GameObjecet身上。
    觸發器(qì),隻需要在檢視麵板中的碰撞器組件中勾選IsTrigger屬性選擇框。

    兩(liǎng)個(gè)物體相接觸(chù)時到底執行OnTriggerEnter還是執行(háng)OnCollisionEnter方法,這兩個又有什麽區別呢?

    為了驗證碰撞器與(yǔ)觸發器的區別,現設計一個簡單的遊戲,讓小汽車與小球發生碰撞。新建一個C#腳本文件,把它拖給(gěi)小汽車對象,雙擊該腳本文件進入腳本(běn)編輯器,在該腳本中加入如下兩個方法,並分別設置一個斷點:


    觸發信息檢測:
    1.MonoBehaviour.OnTriggerEnter(Collider collider)當進入觸發器
    2.MonoBehaviour.OnTriggerExit(Collider collider)當退出觸發器
    3.MonoBehaviour.OnTriggerStay(Collider collider)當逗留觸發器
    碰撞信息檢測:
    1.MonoBehaviour.OnCollisionEnter(Collision collision) 當進入碰撞器
    2.MonoBehaviour.OnCollisionExit(Collision collision) 當退出碰撞器
    3.MonoBehaviour.OnCollisionStay(Collision collision)  當逗留碰撞(zhuàng)器


    // 開始接觸void OnTriggerEnter(Collider collider) {

    Debug.Log("開始(shǐ)接觸:" + collider.gameObject.name);

    //Debug.Log (collider.gameObject.name);  

    }

    // 接觸持續中void OnTriggerStay(Collider collider) {

    Debug.Log("接(jiē)觸持續(xù)中");

    }

    // 接觸結束void OnTriggerExit(Collider collider) {

    Debug.Log("接觸結束");

    }

    // 碰撞開始void OnCollisionEnter(Collision collision) {

    var name = collision.collider.name;Debug.Log("碰撞(zhuàng)物: " + name);

    //var tag = collision.collider.tag;//Debug.Log("Tag is " + tag);

    }

    // 碰撞持續中(zhōng)void OnCollisionStay(Collision collision) { 

     //TODO:

    }

    // 碰撞結束void OnCollisionExit(Collision collision) { 

     //TODO:

    }

    當未勾選碰撞器的Is Trigger選項時汽車與球體發生碰撞,進入方法(fǎ)OnCollisionEnter,碰撞之後汽車(chē)產生被球體撞飛的效果:

    如果(guǒ)將碰撞器的Is Trigger屬性選中,再次啟動遊戲讓球體與(yǔ)汽車產生接觸(chù),這時進入方法OnTriggerEnter。之後球體直接穿過汽車,但球體與汽車都沒有產生碰撞效果:

    unity3d中(zhōng)的碰撞器和觸(chù)發器的區別?
    碰撞器是(shì)觸發(fā)器的載體,而觸發器隻是碰撞器(qì)身上的一個屬(shǔ)性
    當Is Trigger=false時,碰撞器根據(jù)物(wù)理引(yǐn)擎引發碰撞,產生碰(pèng)撞的效(xiào)果,可以調用OnCollisionEnter/Stay/Exit函數;
    當(dāng)Is Trigger=true時,碰撞器被物(wù)理引擎所忽略,沒有碰撞(zhuàng)效果,可以調用OnTriggerEnter/Stay/Exit函數。
    如果既要檢測到物體的接觸(chù)又不(bú)想讓碰撞檢測影響物體移動或(huò)要檢測一個物件是否經過(guò)空間中的某個區域(yù)這時就可以(yǐ)用到觸發器
    例子:
    碰撞器:有作用(yòng)力,如車被撞飛、皮球掉在地上又彈起效果

    觸發器:沒有作(zuò)用力(lì),如人站在靠近門的位置,門自動打開

    网站地图 正能量网-传播正能量弘扬主旋律-免费正能量网站www正能量-免费正能量网站www正能量下载在线观看官网