Главная » Статьи » Программирование » Unity |
В каких случаях полезно применять очередь объектов вместо их уничтожения? Часто очереди применяют к снарядам (пулям, патронам), другими словами объектам у которых короткая жизни, но и которые требуются регулярно. В таких случаях очень неразумно использовать Destroy и потом заново создать копии объекта из префаба это отнимает много ресурсов и может замедлить игру. Очередь объектов создать не сложно достаточно создать некий список или массив, в котором будет храниться очередь. Более подробно это рассмотрим на примере. Недавно используя свободное время, я создал небольшую 2D игру чем-то похожу на танки, в которые часто играл на приставках. На создание игры ушло около дня и как обычно я использовал очередь для снарядов. Очередь была создана общая на все игровые объекты игры, которые могут атаковать.
Постараюсь разобрать написанный скрипт по порядку. Класс «Attack» хранит необходимую информацию об атаке, конечно можно было использовать несколько обычных списков, но мне удобнее убирать все в один класс, мало ли нужно будет использовать такой же класс в другой игре, а он уже готов и методы тоже J . Класс «GameObjectInfo» просто содержит ссылки и методы общие для всех игровых объектов сцены, вы можете заменить его на GameObject, разницы не будет. Все запросы на таки добавляются через метод «attackAdd» как видно по коду снаряды у меня могут лететь только справа налево или наоборот. Как только в наш список попала новая атака (метод «Update») мы ищем в очереди свободный снаряд, если такого нет, то создаем новый и добавляем его к списку очереди. Когда снаряд исполнит свое предназначение он выключит себя сбросит необходимые параметры и через какое-то время снова вернется в строй. В большинстве случаев пулы у меня являются общими для всех игровых объектов, которые используют объекты контролируемые пулом. Разумеется можно прикреплять пулы к определенным объектам и это может быть будет проще, но при этом стоит учитывать те факты, что объект может выключаться и включаться и поэтому нужно такие события обрабатывать в пуле. В любом случае пулы использовать гораздо лучше чем уничтожать и создавать объекты. Даже, если вы создаете игру для мобильных устройств производительность повыситься, а количество оперативной памяти увеличиться не так сильно, но я не думаю, что об оперативной памяти на мобильных устройствах в наше время нужно беспокоится. | |
Просмотров: 1337 | | |
Всего комментариев: 0 | |