C# 看到其他标签,但不是他自己的

C# 看到其他标签,但不是他自己的,c#,arraylist,unity3d,C#,Arraylist,Unity3d,可以调用数组中的所有对象吗?还是使用数字是唯一的方法 public void Update() { Targetting ge = (Targetting)target.GetComponent("Targetting"); enemies = ge.targets; float attackDistanceP = Vector3.Distance(target.transform.position, transform.position); foreach

可以调用数组中的所有对象吗?还是使用数字是唯一的方法

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;

}
public void Update()
{
targeting ge=(targeting)target.GetComponent(“targeting”);
敌人=目标;
浮点攻击距离p=Vector3.距离(target.transform.position,transform.position);
foreach(在敌人中转化敌人)
{
float enemyDistance=Vector3.距离(敌方.transform.position,transform.position);
打印(灌肠距离);
}
调试.绘制线(transform.position、waypointPosition、Color.black);
如果(攻击距离P<8)
disableNow=true;
如果(攻击距离P>8)
disableNow=false;
}

我想调用数组中的所有对象。这样所有的敌人都能看到对方。但我不想让他们看到自己。我正在使用GameObject.FindGameObjectsWithTag在其他脚本中填充数组。

一些过早的优化:

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

    float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position);
    print(enemyDistance);
}
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;
}
使用System.Collections.Generic;
公共交通;
针对通用电气;
void Start(){
trans=转换;
ge=target.GetComponent();
}
无效更新(){
敌人=目标;
float attackdistance p=(target.trans.position-trans.position).sqrMagnitude;//保存平方根
foreach(在敌人中转化敌人){
如果(敌人==trans)继续;//跳过我
float enemyDistance=(敌方.trans.position-trans.position).sqrMagnitude;//保存平方根
打印(灌肠距离);
}
Debug.DrawLine(横移位置、航路点位置、颜色、黑色);
如果(攻击距离p<64)
disableNow=true;
如果(攻击距离P>64)
disableNow=false;
}

您在标签中存储的是什么?我使用的是Listenemies;我不完全理解您问题的背景,因此我不会向您提供完整答案或代码片段,但您可以尝试在调用
敌人[]
中的所有对象时检查敌人ID或其他唯一标识符是否与他自己的ID相同。希望这对你有点帮助。我有一个数组,它在每个对象上循环,标记==“敌人”。这个函数在一个关于敌人的脚本中。我的场景中有三个敌人,所以我得到了三个距离变量,这是带有脚本的敌人和其他敌人之间的距离。但它也会返回保存te脚本的敌人的距离值。所以我想要的是它忽略他自己的标记,这样只有2个值返回。我编辑了上面的脚本。优化提示:不要每帧调用GetComponent。应该在Start()方法中将其分配给变量。您还应该存储this.transform(这是一个在后台使用GetComponent的属性)的值,因为这种查找也会很昂贵。谢谢,伙计:)我会在有时间的时候尝试,我会让您知道它是否有效!