猿问

UnityEngine.GameObject与Generic.List

public void FindClosestEnemy()

{

    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                             

    pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, 

obj.transform.position)).ToList();

}

我不明白两个列表之间的区别。如何将“ UnityEngine.GameObject []”列表转换为System.Collections.Generic.List> UnityEngine.GameObject <


慕无忌1623718
浏览 197回答 2
2回答

交互式爱情

GameObject.FindGameObjectsWithTag返回一个GameObjects数组。C#中的数组是一种数据结构,用于存储相同类型的多个对象。一个列表是对象的泛型集合。尽管数组和列表在概念上非常相似,但是两者在数据访问和使用方面有所不同。通常,数组在创建时只会填充一次,之后只能读取,而List可以随时更改其元素(有一些注意事项)。这个StackOverflow问题总结了为什么您可能想要另一个:Array vs List <T>:何时使用哪个?在您的特定情况下,您想对您的GameObject集合应用一些Linq排序,因此您需要将接收FindGameObjectsWithTag到的数组转换为列表。您可以通过多种方式来执行此操作。最简单的方法是在列表上使用构造函数重载来一次分配整个数组:GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);其他一些选项在这里可用:System.Array到List的转换

LEATH

正如史蒂夫(Steve)正确解释的那样,但我想以不同的方式回答:实际上,在您的代码中,您是将数组类型对象(GameObject.FindGameObjectsWithTag("Player"))分配给列表类型(List<GameObject> pList)对象,而编译器并不隐式支持该对象。您必须将列表转换为数组类型:List<GameObject>&nbsp;pList&nbsp;=&nbsp;new&nbsp;List<GameObject>(GameObject.FindGameObjectsWithTag("Player"));之后,您将可以使用您的代码。现在问题的第一部分我不明白两个列表之间的区别。实际上,您是在询问不同的黑白数组和列表,并且需要记住的主要区别是,当您具有固定长度的数据时,则应使用数组,如果数据长度可变,则应使用列表。
随时随地看视频慕课网APP
我要回答