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



















