Постановка задачи:
Нам нужно создать сетку из спрайтов 160х160. Каждый спрайт движется в рандомном направлении и с рандомной скоростью. При столкновении друг с другом спрайт исчезает и появляется через секунду, где то за экраном. Нужно что бы это все работало при 30-60 фпс.
Мое решение:
В скрипте Spawner у меня 3 листа со скоростью, направлением и риджидбоди2д. В старте я создаю спрайты ставлю их по сетку в двойном цикле, тут же рандомлю скорость и направление и вместе с риджидбоди2д добавляю их в списки. В методе FixedUpdate я прохожу циклом по всем элементам списка риджидбоди2д и даю каждому его направление и скорость. На спрайте висит скрипт, который отслеживает столкновение через OnTriggerEnter2D и вызывает из Spawner метод, в котором этот спрайт выключается, перемещается за экран и там снова активируется и продолжает движение. Я смог добиться 20 фпс при 120х120 спрайтах.
Вопрос: Какие методы оптимизаций еще можно применить?
Ps: Я читал про ECS & Job System помогут ли они мне в этом случае ведь я использую передвижение через риджидбоди, а не трансформ. Если да то не могли бы вы показать на легком примере, как это должно выглядеть.
Да, помогут. Ещё не забывайте использовать профайлер. Также используйте трансформ, а столкновения проверяйте сами. Кроме того, используйте лайфхаки, типа проверять x2-x1 вместо пересечения границ, использовать квадрат расстояния и т. д.
Кроме самой физики, советую оптимизировать графику, в частности спрайты.