2011-03-17 4 views
0

配列内のすべてのオブジェクトを呼び出すことはできますか?または番号を唯一の方法で使用していますか?他のタグを参照してください。

public void Update() 
{ 
    Targetting ge = (Targetting)target.GetComponent("Targetting"); 
    enemies = ge.targets; 

    float attackDistanceP = Vector3.Distance(target.transform.position, transform.position); 

    foreach (Transform enemy in enemies) 
    { 
     float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position); 
     print(enemyDistance); 
    } 

    Debug.DrawLine(transform.position, waypointPosition, Color.black); 

    if (attackDistanceP < 8) 
     disableNow = true; 

    if (attackDistanceP > 8) 
     disableNow = false; 

} 

敵の[]配列内のすべてのオブジェクトを呼び出すとします。すべての敵が互いに見ることができるように。しかし、私は彼らに自分自身を見せたくありません。他のスクリプトで配列を埋めるためにGameObject.FindGameObjectsWithTagを使用しています。

+0

それはあなたがタグに保存されていることは何ですか? – Pieter888

+0

リストの敵を使用しています。 – Amacoder

+0

私はあなたの問題の文脈を完全に理解していないので、完全な答えやコードスニペットをあなたに提供することはありませんが、何らかの形で敵のIDやその他の一意の識別子が自分と等しいかどうかを調べることができます。敵[]の中のオブジェクト。あなたを少し助けてくれることを願っています。 – Pieter888

答えて

1

あなたのためにいくつかの時期尚早な最適化:

using System.Collections.Generic; 

public Transform trans; 
Targetting ge; 

void Start() { 
    trans = transform; 
    ge = target.GetComponent<Targetting>(); 
} 

void Update() { 
    enemies = ge.targets; 

    float attackDistanceP = (target.trans.position - trans.position).sqrMagnitude; // save a square root 

    foreach(Transform enemy in enemies){ 
     if (enemy == trans) continue; // skip me 

     float enemyDistance = (enemy.trans.position - trans.position).sqrMagnitude; // save a square root 
     print(enemyDistance); 
    } 

    Debug.DrawLine (trans.position, waypointPosition, Color.black); 

    if(attackDistanceP < 64) 
     disableNow = true; 

    if(attackDistanceP > 64) 
     disableNow = false; 
} 
+0

それは動作します! :Dあなたの時間のおかげで、私の人を助けて:) – Amacoder

1
foreach(Transform enemy in enemies){ 
    if (enemy == this.transform) continue; // skip me 

    float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position); 
    print(enemyDistance); 
} 
+0

最適化のヒント:GetComponentをすべてのフレームで呼び出さないでください。これをStart()メソッドの変数に代入する必要があります。また、この参照は高価になる可能性があるので、this.transformの値(GetComponentを使用するプロパティ)も格納する必要があります。 – Calvin

+0

ありがとうございます:)私は時間があるときにこれを試してみて、それが動作するかどうかをお知らせします! – Amacoder

関連する問題