Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Управление большим количеством rigidbody2D [C#]  (Прочитано 820 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kiteg

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
В сцене присутствует до 300 объектов rigidbody2D. Управление каждым из объектов осуществляется с помощью вычисления координат точек ближайшего пути до цели (ассет NavMesh2D) и создания вектора скорости до ближайшей точки каждый FixedUpdate() rb.velocity = new Vector2([ближайшая точка]);
Естественно я столкнулся с большими проблемами в производительности из-за:
1) Вычисление точек пути. Когда это происходит для 300 объектов одновременно (всем объектам отдана команда следовать куда-либо). Вроде как успешно решается при помощи корутины, которая распределяет вычисления по времени.
2) Если приказать всем следовать в одну точку начинается толкотня объектов и из-за обработки огромного кол-ва столкновений производительность падает.
3) Вектор скорости rb.velocity = new Vector2([ближайшая точка]); для каждого объекта задается каждый FixedUpdate(), что вероятно тоже влияет на производительность, но если постоянно не задавать вектор скорости то при попутном столкновении с другим динамическим объектом рассматриваемый объект промахнется мимо ближайшей точки пути -> следующая точа пути не будет задана, а вектор скорости перерасчитан не будет.

Во многих играх эти проблемы обошли или использовали какой-либо другой способ управления юнитами. Например Mount and blade или любая другая игра с массовыми сражениями.
Что тут можно предпринять?

ТС не появлялся на Форуме более полугода по состоянию на 15/07/2019 (последняя явка: 19/09/2017). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 15 Июля 2019, 01:24:01 от zg_nico »

 

Страница сгенерирована за 0.273 секунд. Запросов: 23.