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;

}

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

4

2 に答える 2

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

    float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position);
    print(enemyDistance);
}
于 2011-03-17T17:16:39.623 に答える
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;
}
于 2011-03-17T17:29:09.757 に答える