Страница 1 из 1

Управление большим количеством rigidbody2D

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

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

Re: Управление большим количеством rigidbody2D

СообщениеДобавлено: 19 сен 2017, 16:43
Tolking
Осознать, что поиск пути не совместим с физикой в общем виде. И использовать/создать поиск пути который учитывает другие движущиеся агенты...

Re: Управление большим количеством rigidbody2D

СообщениеДобавлено: 19 сен 2017, 18:30
kiteg
Мда, печально. Есть какие-нибудь идеи или инфа на данную тему?