unity 3d Как я могу рассчитать расстояние между концом и каждым игроком при приближении по прямой, затем отсортировать их по расстоянию,

#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();