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的属性)的值,因为这种查找也会很昂贵。谢谢,伙计:)我会在有时间的时候尝试,我会让您知道它是否有效!