Unity пересоздает объекты, но не обновляет ссылки

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 21 июл 2019, 07:52

Здравствуйте.

Беспокоит одна проблема уже давно, но я ее избегал)

Пример:
2 сцены: одна с меню, другая игровая.
Из меню загружаю игровую сцену в single mode, играю, выхожу в меню, захожу снова и ссылки, которые висят в редакторе, все ещё есть, но объекты, к которым они обращаются уже удалены при выгрузки сцены в прошлый раз, соответственно Missing Reference Exception.
Те ссылки, которые кэшируются в Start, пропадают таким же образом, потому что (интересно, почему), Start второй раз не вызвался при второй загрузке сцены.
Может кто-нибудь объясянить, что это за дичь? Не делать же всю сцену неубиваемой и не делать же аддитивной игровую сцену...

Спасибо
recstazy
UNец
 
Сообщения: 5
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 21 июл 2019, 08:23

Почитай про DontDestroyOnLoad
TheMamont
UNITрон
 
Сообщения: 178
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 21 июл 2019, 09:39

Еще раз) не прибегая к неубиваемости (Don't destroy on load) всех объектов в сцене, связанных ссылками редактора (получится костыль, если половина сцены не будет удаляться, который потребует другой костыль определяющий, что уже есть в сцене, а что нет, это называется говнокод).

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

P.s. Пример: пропадает ссылка на UI.ViewPort, на который ссылается ScrollView, это нативный ui юнити и он отваливается. Предложите не удалять его при переходе обратно в меню из игровой сцены?
recstazy
UNец
 
Сообщения: 5
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 21 июл 2019, 10:40

recstazy писал(а):Еще раз) не прибегая к неубиваемости (Don't destroy on load) всех объектов в сцене, связанных ссылками редактора (получится костыль, если половина сцены не будет удаляться, который потребует другой костыль определяющий, что уже есть в сцене, а что нет, это называется говнокод).

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

P.s. Пример: пропадает ссылка на UI.ViewPort, на который ссылается ScrollView, это нативный ui юнити и он отваливается. Предложите не удалять его при переходе обратно в меню из игровой сцены?

Попробуй сделать префабы всех своих объектов. А если уже в префабах то попробуй давать ссылки на префабы, а не объекты со сцены.
TheMamont
UNITрон
 
Сообщения: 178
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 23 июл 2019, 05:18

Все еще звучит, как костыль) хорошо, спасибо)
recstazy
UNец
 
Сообщения: 5
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 23 июл 2019, 15:08

recstazy писал(а):Все еще звучит, как костыль) хорошо, спасибо)

Отпишись потом,как оно.
TheMamont
UNITрон
 
Сообщения: 178
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение AngryCat 23 июл 2019, 17:27

recstazy писал(а):Все еще звучит, как костыль) хорошо, спасибо)

то что ты делаешь это костыль. А это адекватный способ.
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 600
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 03 авг 2019, 17:28

В общем, я уже сделал специальный контейнер со ссылками на все объекты, к которым нужны ссылки через редактор. Я сделал, чтобы при передаче ссылки он проверял на null и искал объект поновой через GameObject.Find(), но после перезагрузки сцены, он почему-то думает, что объект всё еще существует (ссылка не null) и не ищет его заново, однако при обращении к полученной "проверенной" моим референс менеджером ссылке (проверка производится прямо при передаче ссылки), я получаю Missing reference exception, ругается что объект удален, а я ссылку к нему дергаю.
Кэширую ссылку через OnEnable, чтобы оно вызывалось во второй раз после перезагрузки сцены.

Бомбит так, что стул прожгло уже.

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

скрин:
https://drive.google.com/file/d/1NBAK5J ... sp=sharing
recstazy
UNец
 
Сообщения: 5
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 05 авг 2019, 06:09

Сделал вчера, чтобы ссылки на объекты не ккшировались в классах, а через свойство дёргались из референс менеджера. Заработало. Но утром пришла в голову идея фикс. Есть подозрение, что ссылки Теряются только между объектами, у которых нет общего парента. Надо попробовать все объекты в иерархии повесить на один пустой рут. Как проверю - отпишу)
recstazy
UNец
 
Сообщения: 5
Зарегистрирован: 16 фев 2019, 17:53


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 16