#unity3d
#unity3d
Вопрос:
unity 3d Как я могу рассчитать расстояние между концом и каждым игроком при приближении по прямой, затем отсортировать их по расстоянию.
мой код
float closest = 1000; //add your max range here
GameObject closestObject = null;
for (int i = 0; i < MyListOfObjects.Length; i ) //list of gameObjects to search through
{
float dist = Vector3.Distance(MyListOfObjects[i].transform.position, winpont.transform.position);
if (dist < closest)
{
closest = dist;
closestObject = MyListOfObjects[i];
closestObjects[i] = MyListOfObjects[i];
//if (closestObject.gameObject.tag == "Player")
//{
// print(MyListOfObjects[i]);
//}
print(MyListOfObjects[i].name);
}
}
Комментарии:
1. Для этого вы можете использовать
SortedDictionary
илиSortedList
. Идея состоит в том, чтобы отсортировать после того, как вы каталогизировали объекты, эти типы сделают это за вас.
Ответ №1:
Вы можете использовать LINQ для упорядочивания коллекции по расстоянию.
Например:
var objects = new List<GameObject>(); // Collection of objects
var player = new GameObject();
// Sort object, It will return in typeof IEnumerable<T>
var sortedCollection = objects.OrderBy(obj => Vector3.Distance(player.transform.position, obj.transform.position));
// Convert your IEnumerable<T> to array or List as you wish
var sortedArray = sortedCollection.ToArray();