免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
[Unity2D]Trigger碰撞觸發(fā)器

    碰撞觸發(fā)器意思就是檢測到兩個物體碰撞的時候,觸發(fā)執(zhí)行腳本相關的邏輯。比如在游戲中實現兩個物體相撞的時候產生爆炸的效果,那么就需要通過觸發(fā)器來檢測到兩個物體相撞的時候,然后播放預設好的爆炸的粒子效果。

    Unity引擎觸發(fā)器系統(tǒng)有三個屬性:Box Collider、Is Trigger、Rigibody

Box Collider:Unity3D的GameObject提供的基本模型才具有這個屬性,表示該物體是否會和別的物體發(fā)生碰撞。

Is Trigger:BoxCollider的子選項,表示該物件是否為一個觸發(fā)器。

Rigibody:選中物件,才能在菜單“Component”里,給物件添加Rigibody組件。

兩Collider相碰,至少要有一個物體具有Rigibody剛體才會觸發(fā)Trigger函數。當物體進來,OnTriggerEnter當然會觸發(fā)。出去時,OnTriggerExit也當然觸發(fā)。那么物體在進來后Destory后會如何?經過測試是:不會調用OnTriggerExit。

   基本規(guī)則:腳本(含有觸發(fā)判斷的 OnTriggerEnter() 判斷函數)和Rigibody同為一個物件的組件,Box Collider必須選中。此時兩個物件的Box Collider必須為選中。而 Is Trigger選項必須“至少”有一個物件為選中(可以按邏輯來判斷哪個為觸發(fā)器)。 腳本中的OnTriggerEnter()可以有兩種判斷出發(fā)方式,此函數參數的數據類型為 Collider。 OnTriggerEnter( gameObj : Collider ),一旦觸發(fā)器和Collider發(fā)生碰撞,便會觸發(fā)此函數,其參數便是不包含腳本的物件的gameObject。可以通過判斷其成員 name(物體在Hierarchy面板中的名字) 或 tag(物件在Inspector面板的Tag選項中的名字) 的字符串,來判定是哪個物件。

    關于Unity里面的觸發(fā)器的應用不僅僅可以解決物體之間的碰撞問題,常常還會用來實現游戲邊界的檢測輔助實現一些游戲邏輯。

    1、使用Empty GameObject來實現地面或者頂部邊緣的檢測,比如在實現游戲主角從上面掉下來就會死掉,那么就可以在底部做一個Empty GameObject來通過觸發(fā)器檢測游戲主角是否掉下來。

    2、游戲背景或者物體的動態(tài)生成,比如要實現一個打飛機游戲,敵人和背景都是從上往下移動,在游戲的實現邏輯里面,當上面的敵人和背景向下移動到底部的時候,你需要再生成一批敵人和背景從上面繼續(xù)移動,而當這一批敵人和背景離開屏幕的時候,你還需要銷毀掉它們。實現這樣的一個邏輯也可以依靠觸發(fā)器來輔助實現。原理如下圖所示:

觸發(fā)器的示例代碼:

using UnityEngine;using System.Collections;// 邊緣觸發(fā)器,當移動的物體碰撞到之后將產生新的public class LevelEdge : MonoBehaviour {    // 碰到邊緣 重新生成背景的物體  這里才是判斷是否生成新的游戲物體的前提    void OnTriggerEnter(Collider other)     {        // 碰撞到新增觸發(fā)器,將新增一套新的物體        if (other.name == "SpawnTriggerer")        {            switch (other.tag)            {                case "SecondLayer":                    LevelGenerator.Instance.GenerateSecondLayer(0);                    break;                                case "ThirdLayer":                    LevelGenerator.Instance.GenerateThirdLayer(0);                    break;                                    case "FourthLayer":                    LevelGenerator.Instance.GenerateFourthLayer(0);                    break;                                case "Obstacles":                    LevelGenerator.Instance.GenerateObstacles();                    break;            }        }            // 碰撞到重設觸發(fā)器,將銷毀當前的物體        else if (other.name == "ResetTriggerer")        {            switch (other.tag)            {                case "SecondLayer":                case "ThirdLayer":                case "FourthLayer":                    LevelGenerator.Instance.SleepGameObject(other.transform.parent.gameObject);                    break;                                case "Obstacles":                    other.transform.parent.GetComponent<Obstacles>().DeactivateChild();                    LevelGenerator.Instance.SleepGameObject(other.transform.parent.gameObject);                    break;            }        }            // 碰撞到武器        else if (other.tag == "PowerUps")        {            other.GetComponent<PowerUp>().ResetThis();        }        //If a torpedo is collided with this            // 碰撞到炮彈        else if (other.name == "Torpedo")        {            other.transform.parent.gameObject.GetComponent<Torpedo>().ResetThis();        }    }}

 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
unity 如何隱藏子物體
Unity網格碰撞體(MeshCollider)
如何在unity3d中查找子對象
unity, 判斷可見性
Unity3D中uGUI事件系統(tǒng)簡述及使用方法總結
Unity4.6新UI系統(tǒng)初探(uGUI)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服