2016-12-07 6 views
0

PREAMBLE/* 最近、私は単調で頭を悩ませ始めました。初心者のポンゲームを最も行いました。私は今、3次元オブジェクトで作業しようとしています。私の考えはタワー防衛ゲームを作ることだったので、私はタワーと一時的なターゲットダミーを持っていました。塔には、敵のタグで最も近いオブジェクトを見つけてそれに線を引くスクリプトがありますが、ここに問題があります:*/FindGameObjectsWithTagがオブジェクトを返さない

My 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 
    } 
} 

EDIT:場合

以前あなたはこれを使うことができます:

+0

この関数には、コードをデバッグするために使用していたprint(敵)のようなコメントアウトがあります。私はあなたのコードで使用するFindObjectsOfTypeと同じ問題を抱えています:それはpopulatedされている必要があり、それが空である後にallObjectsの内容を印刷しています。 – totalolage

+0

どのUnityバージョンを使用していますか? –

関連する問題