public void FindClosestEnemy()
{
List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");
pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position,
obj.transform.position)).ToList();
}我不明白这两份名单的不同之处。如何将“System.Collections.Generic.List>UnityEngine.GameObject<”列表转换为UnityEngine.GameObject[]
发布于 2018-04-13 03:45:00
GameObject.FindGameObjectsWithTag返回数组 of GameObjects。
数组 in C#是存储同一类型的多个对象的数据结构。
列表是对象的泛型集合。
虽然数组和列表在概念上非常相似,但两者在数据访问和使用方面存在差异。通常,数组在创建时只填充一次,然后才会读取,而列表可以随时更改其元素(适用一些警告)。
这个StackOverflow问题总结了为什么您可能想要一个而另一个:*何时使用哪一种?
在特定情况下,您希望对GameObject集合应用一些Linq排序,因此需要将从FindGameObjectsWithTag接收的数组转换为列表。
你可以用几种方式做到这一点。最简单的方法是使用列表上的构造函数重载来同时分配整个数组:
GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);这里还有其他一些选项:将System.Array转换为列表
发布于 2018-04-13 05:24:40
正如Steve正确解释的那样,但我想以一种稍微不同的方式回答:
实际上,在您的代码中,您将将数组类型对象(GameObject.FindGameObjectsWithTag("Player"))分配给列表类型(List<GameObject> pList )对象,编译器不隐式支持该对象。必须将列表转换为数组类型:
List<GameObject> pList = new List<GameObject>(GameObject.FindGameObjectsWithTag("Player"));在此之后,您将能够使用您的代码。
现在是问题的第一部分
我不明白这两份名单的不同之处。
实际上,您询问的是不同的b/w数组和列表,需要记住的主要区别是,当您有固定的数据长度时,您应该使用数组,如果您有可变的数据长度,那么就使用List.。
您还可以在堆栈溢出上找到有关此主题的详细信息。
https://stackoverflow.com/questions/49808061
复制相似问题