2016-12-07 175 views
0

序言/ * 我最近開始擺弄團結:做一個初學者的乒乓球比賽,因爲大多數做的,我一直在試圖用現在的3D對象的工作。我的想法是做一個塔防遊戲,所以我有一個塔和一個臨時目標虛擬物。塔有一個腳本,它應該允許它找到與敵方標記最近的對象,並畫出一條線,但這裏是問題:*/FindGameObjectsWithTag沒有返回對象

我的GameObject.FindGameObjectsWithTag(「Enemy」)函數返回一個空陣列,儘管場景上有一個標記的,啓用的對象。

public class Attack : MonoBehaviour 
{ 

    GameObject[] enemies; 
    float dist; 
    GameObject target = null; 
    bool targeted = false; 
    float range = 1000; 

    bool FindTarget() 
    { 
     bool found = false; 
     enemies = GameObject.FindGameObjectsWithTag("Enemy"); 
     //print(GameObject.FindGameObjectsWithTag("Enemy")); 
     foreach (GameObject enemy in enemies) 
     { 
      float tmpd = Vector3.Distance(enemy.transform.position, transform.position); 
      if (tmpd <= range && dist > tmpd) 
      { 
       dist = tmpd; 
       target = enemy; 
       found = true; 
      } 
     } 
     return found; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (!targeted) 
      targeted = FindTarget(); 
     else { 
      Debug.DrawLine(target.transform.position, transform.position, Color.red); 
      dist = Vector3.Distance(target.transform.position, transform.position); 
      if (dist > range) 
       targeted = false; 
     } 
    } 
} 

我看了雖然有一千個其他線程,並找不到我的問題是什麼。任何幫助將不勝感激。

+1

這可能是一個愚蠢的問題,但你是** 100%**確定敵人真的有這個確切的標籤 –

+0

是否啓用這些對象('activeInHierarchy')? –

+0

是的,這也發生在我身上,所以我直接複製了文本以確保它完全相同。 只要我能從檢查員屏幕上看到它們就被啓用,所有的滴答滴答都會打勾,我還需要檢查什麼? – totalolage

回答

0

如果您還沒有調試此代碼,您可以檢查if (tmpd <= range && dist > tmpd)是否正在通過。

但是讓我們假設你已經調試的代碼,並acctualy沒有發現任何物體,那麼我建議你使用這樣的:

var allObjects = GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[]; // this will grab all GameObjects from the current scene! 
foreach(GameObejct obj in allObjects) { 
    if(obj.Tag == "Enemy") { 
     // do some magic here 
    } 
} 

編輯:

在以前的情況下例如不會工作,你可以使用這個:

List<GameObject> allObjects = new List<GameObject>(); 
Scene activeScene = SceneManager.GetActiveScene(); 
activeScene.GetRootGameObjects(allObjects); 
foreach(GameObject obj in allObjects) { 
    if(obj.Tag == "Enemy") { 
     // do some magic here 
    } 
} 
+0

你可以在函數中看到有一個註釋掉,比如我用來調試代碼的print(敵人)。我在您的代碼中使用FindObjectsOfType時遇到了同樣的問題:我在打印allObjects的內容後應該填充它,並且它是空的。 – totalolage

+0

你正在使用哪個Unity版本? –

相關問題