Unity3d. Object Pool
Доброго времени суток!
Весь материал из этого поста в одном unity package: https://drive.google.com/open?id=0ByezjEHgcxecSDN6OHE5akRYZm...
Сегодня постараюсь объяснить как сделать объектный пул в Unity3d. Он нужен для того чтобы не создавать новых объектов на сцене, а использовать уже существующие. Например если мы делаем игру-раннер, где справа налево у нас проезжают препятствия. Чтобы не создавать новые, мы используем уже те которые улетели за экран, а не удаляем их.
Приступим. Для начала создадим скрипт Shape.
Он будет содержать информацию о времени жизни нашего объекта, его скорость. И опишем в нём метод передвижения.
Теперь создадим класс для объектного пула.
В нём мы будем хранить наши отработанные объекты, и добавим методы засовывания и вытаскивания в него объектов. Храниться объекты будут в стэке, потому что нам не принципиален порядок хранения объектов и, насколько мне известно, из стэка быстро достаются/кладутся объекты.
Теперь создадим контроллер наших объектов, который будет полностью контролировать наши объекты.
Теперь создадим объект, в моём случае это спрайт. Кидаем на него скрипт Shape.
И создаём из него префаб.
Создаём пустой объект и кидаем на него ShapePool и ShapesController. В ShapePool указываем наш префаб. Примерно всё должно выглядеть так:
Запускаем, у нас должен получиться что-то вроде бесконечного салюта. В иерархии объектов вы заметите, что количество объектов почти не меняется (если конечно вы не указали гигантское время жизни объектов).
Спасибо за внимание! Если вам понравился пост, и хотите ещё, то можете предлагать тему для следующего поста в комментариях.








Лига Разработчиков Видеоигр
9.8K постов23.4K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"