1

大家好,谁能给我一个方法,我的敌人如何用标签(“人类”)追逐多个目标?看起来

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

变换不适用于使用这个。

4

2 回答 2

2

GameObject.FindGameObjectsWithTag函数返回一个 GameObject 数组。你会像这样使用它:

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

如果您需要 数组Transform,请创建具有返回的 GameObject 大小的新数组,GameObject.FindGameObjectsWithTag然后将其复制到循环中。你不需要这个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;
}
于 2018-09-26T16:24:20.470 回答
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对象。

于 2018-09-26T16:52:49.077 回答