乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       有趣的永 2015-07-18

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

          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函數(shù)。當(dāng)物體進來,OnTriggerEnter當(dāng)然會觸發(fā)。出去時,OnTriggerExit也當(dāng)然觸發(fā)。那么物體在進來后Destory后會如何?經(jīng)過測試是:不會調(diào)用OnTriggerExit。

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

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

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

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

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

      復(fù)制代碼
      using UnityEngine;
      using System.Collections;
      // 邊緣觸發(fā)器,當(dāng)移動的物體碰撞到之后將產(chǎn)生新的
      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;
                  }
              }
                  // 碰撞到重設(shè)觸發(fā)器,將銷毀當(dāng)前的物體
              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ù)制代碼

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多