如何将FindGameObjectsWithTag与transform.position一起使用

时间:2018-09-26 16:20:53

标签: unity3d

大家好,有人可以给我一种方法,让我的敌人如何使用标签(“人类”)追赶多个目标吗?看来

target = GameObject.FindGameObjectsWithTag("Human").GetComponent<Transform>();

转换不适用于此功能。

2 个答案:

答案 0 :(得分:2)

GameObject.FindGameObjectsWithTag函数返回一个GameObject数组。您将这样使用它:

GameObject[] target = GameObject.FindGameObjectsWithTag("Human");

如果您需要Transform的数组,请使用GameObject.FindGameObjectsWithTag返回的GameObject的大小创建一个新数组,然后将其复制到一个循环中。您不需要GetComponent函数。 transform属性应在此处使用。

GameObject[] target = GameObject.FindGameObjectsWithTag("Human");
Transform[] targetTransform = new Transform[target.Length];
//Copy the GameObject transform to the new3 transform array
for (int i = 0; i < target.Length; i++)
{
    targetTransform[i] = target[i].transform;
}

答案 1 :(得分:0)

@Programmer是一个不错的解决方案,但是随着我对ECS效率的更多了解并构建一个干净的解决方案,可能如下。将来还会有更大的适应性。

[System.Serializeable]
public struct Human {
    Transform transform;
}

GameObject[] targets = GameObject.FindGameObjectsWithTag("Human");
List<Human> humans = new List<Human>();
foreach (GameObject target in targets) {
    Human human = new Human();
    human.transform = target.transform;
    humans.add(human);
}

它看起来较慢,可能是初始设置,但不会访问。如果您不需要,则不应该处理直线数组,现在您有了一个可扩展的Human对象。