2011-03-17 55 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 2011-03-17 12:38:41

+0

我使用列表敌人; – Amacoder 2011-03-17 12:40:15

+0

我不完全了解您的问题的上下文,所以我不会提供给您一个完整的答案或代码片段,但您可以尝试检查是否在某种程度上敌对ID或某个其他唯一标识符等于他自己的同时调用所有敌人[]'中的对象。希望能对你有所帮助。 – Pieter888 2011-03-17 14:51:38

回答

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 2011-03-18 10:10:13

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 2011-03-17 17:19:43

+0

感谢队友:)我会试试这个,当我有时间,我会让你知道,如果它的作品! – Amacoder 2011-03-17 17:28:11

相关问题