Оптимизация. Пул объектов (Objects Pool). Рассказываю на примерах в Unity3d

preview_player
Показать описание
Поддержи канал, бро!

И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77

Урок по Unity, в котором я рассказываю про один из приемов оптимизации - пул объектов (Objects Pool). Прием, который позволяет сократить количество Instantiate для объектов с короткой продолжительностью "жизни". Что в последствии благоприятно влияет на производительность.

Плюс, этот урок является отличным примером к предыдущему уроку о Generic классах в C#:

Подписуйся на канал в телеге, или на твиттер, там я публикую коротенькие типсы и практики, которые помогут писать код лучше, понятнее и эффективнее:
Рекомендации по теме
Комментарии
Автор

Привет!
Комментарий поддержки)
Очень интересные видео)
Не останавливайся)

nomad
Автор

Спасибо! Очень хороший и понятный пример пула объектов!

PasterLak
Автор

Делай дальше. Ролики отличные. Вечером попробую

gen_nady
Автор

Спасибо тебе и твоему ObjectPool. Вы мне очень помогли

mizzzlo
Автор

Начала писать свой пул с этого видео, потом пошла на другие, и в итоге все равно вернулась сюда, потому что здесь все намного понятнее. И есть хорошая возможность перестроить под себя то, что нужно, без излишних напряжений извилин)

Спасибо большое! Это видео сильно упростило мне жизнь)

mistertwink
Автор

По сути, просто на сцене заранее есть объекты, либо создаются 1 раз при старте, и потом включаются или выключаются имитируя создание и разрушение, глобально это не увеличивает производительность но избавляет от ненужных фризов на любой платформе, кроме того пул можно расширить разными объектами, и вообще какой-то иерархией с типами

neverworld
Автор

Это просто великолепно!
Почему здесь так мало подписчиков?

alexixrugis
Автор

Хорошо показан пример. Отличный ролик.

vladisslavss
Автор

пул хороший, но медленный - O(n). потому как каждый раз в цикле ищет свободный элемент. если ввести индекс на текущую позицию в пуле, то отпадёт необходимость в цикле. и сложность алгоритма будет уже O(1). а это уже значительно веселее, т.к. скорость работы пула уже не будет зависеть от количества данных в нём.

sutr
Автор

думаю включать элемент в HasElement() не очень логично, т.к. исходя из названия метода мы ожидаем получить ссылку на объект/либо нуль, а вовсе не проихводить с ним какие то действия (включение). Логичнее включать его в GetElement(), где уже логика подразумевает доставание/создание объекта и его активацию (в случае создания - флагом).

nightyonetwothree
Автор

Отличный вариант, чтобы делать снаряды выстрелов и другие эффекты

mltnqnj
Автор

Спасибо, наверное лучший Pool который я видел на Youtube, и на Unity Learn.

Сейчас по рандому смотрю твои видосики, хоч сказать что мне старые больше нравиться...
В новых видосиков ты столько создаешь интерфейсов :c
Шо просто путаешься, а здесь 1 скрипт и Pool готов!

antonpashkevich
Автор

очень полезные видео у тебя и понятно объясняешь, спасибо большое! подписка и лайк однозначно!
было бы здорово, если бы ты снял видео о паттерне фабрика)

kat.shnaider
Автор

С таким пулом могут быть проблемы.. например, я использую этот пул для пуль/ракет или т.п.
Снаряд, при попадании в коллайдер игрока должен отключиться и нанести урон.
Вот в чем ошибка: если игрок не двигается, то снаряд, который ранее в него попал и отключился снова берётся из пула и активируется там же, где все ещё стоит игрок. И событие OnTrigerEnter срабатывает ДО того как мы переместили снаряд в нужное место. Потому что он активируется сразу как берётся из пула, а перемещается в нужное место после активации

Evgeniy_LuxorGame
Автор

Видео классное. Одно замечание важное для следующих видео: null - это не ноль;

grayhouse
Автор

Классный ролик! По Вашим видео изучаю Unity и C#. Имя пользователя - это Ваша мечта?)

tuz
Автор

Чет я не понимаю, зачем использовать generic class в юнити, ведь все объекты на сцене имеют 1 тип GameObject.

yaroslav
Автор

Супер! Спасибо за труд!
Вопрос. В методе CreateCube сначала создается обьект на сцене, а потом меняется его позиция, верно?

tarastaras
Автор

Отличные видео, спасибо! Но вопрос, зачем ты используешь " this" там где это не обязательно? привычка?

roynknf
Автор

привет, хорошее видео, но есть пару вопросов по СОЛИДности метода HasFreeElement он всё таки выглядит печально, так как имеет больше одной ответствнности, лучше его разделить, и out нас полностью обязывает использовать этот функционал

SvzlsT