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

25 600 движущихся спрайтов

СообщениеДобавлено: 26 окт 2019, 13:26
lolostyle
Добрый день.

Постановка задачи:
Нам нужно создать сетку из спрайтов 160х160. Каждый спрайт движется в рандомном направлении и с рандомной скоростью. При столкновении друг с другом спрайт исчезает и появляется через секунду, где то за экраном. Нужно что бы это все работало при 30-60 фпс.

Мое решение:
В скрипте Spawner у меня 3 листа со скоростью, направлением и риджидбоди2д. В старте я создаю спрайты ставлю их по сетку в двойном цикле, тут же рандомлю скорость и направление и вместе с риджидбоди2д добавляю их в списки. В методе FixedUpdate я прохожу циклом по всем элементам списка риджидбоди2д и даю каждому его направление и скорость. На спрайте висит скрипт, который отслеживает столкновение через OnTriggerEnter2D и вызывает из Spawner метод, в котором этот спрайт выключается, перемещается за экран и там снова активируется и продолжает движение. Я смог добиться 20 фпс при 120х120 спрайтах.

Вопрос: Какие методы оптимизаций еще можно применить?
Ps: Я читал про ECS & Job System помогут ли они мне в этом случае ведь я использую передвижение через риджидбоди, а не трансформ. Если да то не могли бы вы показать на легком примере, как это должно выглядеть.

Спасибо.

Re: 25 600 движущихся спрайтов

СообщениеДобавлено: 26 окт 2019, 15:18
Xtir
Я так понял направление объектов рандомно меняется каждый fixed update?

Re: 25 600 движущихся спрайтов

СообщениеДобавлено: 26 окт 2019, 16:05
1max1
Направление и скорость можно задавать только при старте (с 0 гравити) и при включении, зачем это делать каждый физ. тик? Вообще зачем тебе столько спрайтов на сцене)) Кстати от типа коллайдера тоже зависит нагрузка, самый просто естественно circle. Job System возможно поможет за счет многопоточности, но я хз как ей пользоваться)

Re: 25 600 движущихся спрайтов

СообщениеДобавлено: 29 окт 2019, 08:45
jetyb
Человеческое сознание способно отследить максимум 8 объектов, а вы предлагаете 25600?
У вас там жестокое похмелье после недельной гулянки, и вы хотите, чтобы и другим было так же хреново?

Сделать столько (и более) объектов вполне можно, только через GPU и шейдеры. Через коллайдеры все это будет дико тормозить.

Только зачем 25000 объектов? Реально на экране будет значима максимум сотня (иначе - эпилептический приступ). Вот и обращайтесь с сотней объектов в пределах видимости.

Re: 25 600 движущихся спрайтов

СообщениеДобавлено: 29 окт 2019, 09:03
seaman
Без столкновений думаю довольно легко было бы.
Если Pixi может, почему бы Юнити не могла бы?




Re: 25 600 движущихся спрайтов

СообщениеДобавлено: 07 ноя 2019, 09:26
Golandez
Посмотрите в сторону job system и ECS.