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