大家好,谁能给我一个方法,我的敌人如何用标签(“人类”)追逐多个目标?看起来
target = GameObject.FindGameObjectsWithTag("Human").GetComponent<Transform>();
变换不适用于使用这个。
大家好,谁能给我一个方法,我的敌人如何用标签(“人类”)追逐多个目标?看起来
target = GameObject.FindGameObjectsWithTag("Human").GetComponent<Transform>();
变换不适用于使用这个。
该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;
}
@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对象。