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

Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 19:41
Marvin86
Доброго времени! Начал осваивать пул объектов и появилась пара вопросов. Прошу знающих помочь)

1. Есть объекты стоящие на сцене, есть которые пулятся. Как искать объекты которые постоянно пулятся?
Если ищем так: GameObject.Find(Объект1).GetComponent<Скрипт1Объект1>();
То когда объекта нет, выдает ошибку, игра не крашится, но ошибка есть.
Можно ли этот способ поместить в Update?
2. Есть объект который пулится в большом количестве. Как сделать так, чтобы после пула, он был на сцене 1 секунду и возвращался в пул, т.е. чем 1 секунду его удержать? Коротиной? Просто много объектов, не будет ли грузить систему много коротин?

Re: Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 19:49
Paul Siberdt
Marvin86 писал(а):1. Есть объекты стоящие на сцене, есть которые пулятся. Как искать объекты которые постоянно пулятся?
Если ищем так: GameObject.Find(Объект1).GetComponent<Скрипт1Объект1>();
То когда объекта нет, выдает ошибку, игра не крашится, но ошибка есть.
Можно ли этот способ поместить в Update?


Их не надо искать, о таких объектах знает их менеджер. Объекты при инстансировании заносятся в список. Если объекта нет - значит это не объект пула, которые есть всегда после создания.
В апдейты не надо помещать ничего ресурсоемкого, не надо помещать поиски и геткомпоненты.

Marvin86 писал(а):2. Есть объект который пулится в большом количестве. Как сделать так, чтобы после пула, он был на сцене 1 секунду и возвращался в пул, т.е. чем 1 секунду его удержать? Коротиной? Просто много объектов, не будет ли грузить систему много коротин?

Заведите состояния объекта пула, например, "активный" и "свободный". Рождайте объекты свободными в "надежном месте" и, при надобности, делайте их активными, обрабатывайте, считайте менеджером их время жизни и, возвращая в стостояние "свободный", снова прячьте в "надежное место".

Re: Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 20:46
Marvin86
Paul Siberdt писал(а):Заведите состояния объекта пула, например, "активный" и "свободный". Рождайте объекты свободными в "надежном месте" и, при надобности, делайте их активными, обрабатывайте, считайте менеджером их время жизни и, возвращая в стостояние "свободный", снова прячьте в "надежное место".

Правильно ли я понял: нужно проверить активен ли объект?
Заранее спасибо!

Re: Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 21:27
samana
Создайте массив (пул) ваших объектов и сделайте их все не активными (SetActive(false)).
Когда хотите взять объект из пула, то пробегайтесь по пулу и вытаскивайте первый попавшийся элемент, который не равен null и делайте его активным и тут же устанавливайте в пуле null для индекса этого объекта.
Когда хотите поместить объект обратно в пул, то ищите снова первый null в пуле и назначайте объект в это место.

Re: Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 22:20
Paul Siberdt
А SetActive не слишком ли затратная операция в сравнении с простым выносом объекта в жопеня за фруструм? Собственно, давно перестал пользовать SetActive, так давно, что и забыл, почему. :)

Re: Поиск pool объектов

СообщениеДобавлено: 12 янв 2017, 22:33
samana
Paul Siberdt писал(а):А SetActive не слишком ли затратная операция в сравнении с простым выносом объекта в жопеня за фруструм? Собственно, давно перестал пользовать SetActive, так давно, что и забыл, почему. :)


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