Size: a a a

2021 March 31

А

Александр in unity3d.ru
Ivan Morgun
Ребят, а как правильно отписываться от ивентов? Знаю, что это надо делать, но не знаю когда
когда тебе больше не нужна подписка) Например перед устранением объекта из системы
источник

IM

Ivan Morgun in unity3d.ru
Paul Sammler
с помощью -= ?
Да, но когда это делать нужно. Перед сменой сцены? Уничтожением объекта?
источник

А

Александр in unity3d.ru
Ivan Morgun
Да, но когда это делать нужно. Перед сменой сцены? Уничтожением объекта?
В целом да, плюс, например, перед возвратом в пул объекта, все зависит от логики системы
источник

IM

Ivan Morgun in unity3d.ru
Ну вот допустим у меня в игре есть миниигры. И окончание миниигры является ивентом чтоб вернуть управлением основному player'у. Но в миниигру можно несколько раз сыграть. Получется, мне отписываться надо перед сменой сцены? Или не надо вообще?
источник

А

Александр in unity3d.ru
Ivan Morgun
Ну вот допустим у меня в игре есть миниигры. И окончание миниигры является ивентом чтоб вернуть управлением основному player'у. Но в миниигру можно несколько раз сыграть. Получется, мне отписываться надо перед сменой сцены? Или не надо вообще?
Как стала какая подписка не нужна, то лучше отписать, чтобы потом не искать где и откуда отписываться, хотя постоянно подписывать и отписывать тоже не стоит
источник

PS

Paul Sammler in unity3d.ru
Ivan Morgun
Да, но когда это делать нужно. Перед сменой сцены? Уничтожением объекта?
если тот, кто подписывается уничтожается, то в OnDestroy отписываться
если уничтожается тот, на кого все подписались, хватает простого зануления делегата (или присвоения делегату пустой затычки "delegate{}").
советую не оставлять какие-либо подписки при переходе со сцены на сцену, т.к. GC может не удалить "удаленные" объекты и будет утечка памяти
источник

IM

Ivan Morgun in unity3d.ru
Paul Sammler
если тот, кто подписывается уничтожается, то в OnDestroy отписываться
если уничтожается тот, на кого все подписались, хватает простого зануления делегата (или присвоения делегату пустой затычки "delegate{}").
советую не оставлять какие-либо подписки при переходе со сцены на сцену, т.к. GC может не удалить "удаленные" объекты и будет утечка памяти
Таки при переходе между сценами могут быть проблемы, да? Напомни, onDestroy  в объектах вызывается при смене сцен?
источник

PS

Paul Sammler in unity3d.ru
Ivan Morgun
Ну вот допустим у меня в игре есть миниигры. И окончание миниигры является ивентом чтоб вернуть управлением основному player'у. Но в миниигру можно несколько раз сыграть. Получется, мне отписываться надо перед сменой сцены? Или не надо вообще?
при загрузке той же сцены, которую вы выгрузили, считайте, что у вас на сцене абсолютно другие объекты, а объекты с прошлой сцены попали в "лимб", где ожидают своих "лангольеров" в лице GC. следует отписываться и подписываться заново.
источник

PS

Paul Sammler in unity3d.ru
Ivan Morgun
Таки при переходе между сценами могут быть проблемы, да? Напомни, onDestroy  в объектах вызывается при смене сцен?
OnDestroy вызывается, когда Unity уничтожает нативный c++-объект. это также происходит при выгрузке сцены.
источник

IM

Ivan Morgun in unity3d.ru
Paul Sammler
при загрузке той же сцены, которую вы выгрузили, считайте, что у вас на сцене абсолютно другие объекты, а объекты с прошлой сцены попали в "лимб", где ожидают своих "лангольеров" в лице GC. следует отписываться и подписываться заново.
Да, это я понял. Я имею ввиду как мне сейчас корректно в самом объекте определять, что сейчас загрузится другая сцена. Достаточно ли добавить отписку просто в OnDestroy
источник

IM

Ivan Morgun in unity3d.ru
По идее да, верно?
источник

PS

Paul Sammler in unity3d.ru
Ivan Morgun
Да, это я понял. Я имею ввиду как мне сейчас корректно в самом объекте определять, что сейчас загрузится другая сцена. Достаточно ли добавить отписку просто в OnDestroy
ага
источник

PS

Paul Sammler in unity3d.ru
ну, я лично так и делаю. отписка в OnDestroy - по-моему стандартная практика
источник

PS

Paul Sammler in unity3d.ru
ну можно еще в OnDisable, но это уже зависит от поставленной задачи и прочей бизнес-логики
источник

А

Александр in unity3d.ru
важно помнить, что перед дестроем оно тоже вызовется, но тоже удобно
источник

PS

Paul Sammler in unity3d.ru
обычно используется пара подписка-отписка в Awake/Start-OnDestroy и в OnEnable-OnDisable
источник

DS

Dmitriy Shepa in unity3d.ru
Ребят,  как со скрипта загрузить префаб ui-панели с кнопками? Можете кинуть пример? Не могу избавиться от ошибки в установке родителя
источник

O

OK386 in unity3d.ru
Dmitriy Shepa
Ребят,  как со скрипта загрузить префаб ui-панели с кнопками? Можете кинуть пример? Не могу избавиться от ошибки в установке родителя
какой ошибки установки родителя?
источник

O

OK386 in unity3d.ru
Instantiate(prefab, parent.transform, false)
источник

DS

Dmitriy Shepa in unity3d.ru
OK386
Instantiate(prefab, parent.transform, false)
я устанавливал через SetParent, и собственно ошибку данных выдавало, уже разобрался почему,  спасибо большое
источник