【问题标题】:See other tag but not his own查看其他标签但不是他自己的
【发布时间】:2011-07-17 09:05:07
【问题描述】:

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

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 在另一个脚本中填充数组。

【问题讨论】:

  • 你在标签中存储了什么?
  • 我正在使用 Listenemies;
  • 我不完全理解你的问题的背景,所以我不会为你提供完整的答案或代码 sn-p,但你可以尝试检查敌人 ID 或其他在调用enemies[] 中的所有对象时,唯一标识符等于他自己的标识符。希望对您有所帮助。
  • 我有一个数组,它遍历每个带有标签 == "Enemy" 的对象。此函数位于 Enemy 的脚本中。我的场景中有三个敌人,所以我得到三个距离变量,即脚本中的敌人与其他敌人之间的距离。但它也返回持有脚本的敌人的距离值。所以我想要的是它忽略他自己的标签,所以只返回 2 个值。我编辑了上面的脚本。

标签: c# arraylist unity3d


【解决方案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;
}

【讨论】:

    【解决方案2】:
    foreach(Transform enemy in enemies){
        if (enemy == this.transform) continue; // skip me
    
        float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position);
        print(enemyDistance);
    }
    

    【讨论】:

    • 优化提示:不要每帧都调用 GetComponent。您应该将其分配给 Start() 方法中的变量。您还应该存储 this.transform 的值(这是一个在后台使用 GetComponent 的属性),因为这种查找也会变得很昂贵。
    • 谢谢伙计 :) 我有时间会试试这个,如果它有效,我会告诉你的!
    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2017-06-29
    • 2023-04-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多