При перезагрузке сцены параметры одного скрипта не обновляются
При перезагрузке сцены параметры одного скрипта не обновляются, когда запускаешь проект, то при первой загрузке ссылки на объекты правильные, но при перезагрузке через код параметры (ссылки, которые я указываю в инспекторе) ссылаются на старые удаленные объекты (это только у одного скрипта) (у всех остальных скриптов такой проблемы нет).
Важно то, что после перезагрузки в методе Start все работает (ссылки новые), но в этом скрипте есть метод подписанный на событие и при вызове события в методе этого скрипта происходит ошибка и почему-то параметры которые правильно ссылались в Start начинают ссылаться на уже удаленные объекты. Корутины в методе (который подписан на событие) тоже перестают работать, именно там появляется ошибка отсутствующей ссылки на самого себя (точнее ссылка есть, но ссылается на уже удаленного себя (до перезагрузки).
Кстати еще у этого скрипта при перезагрузке не работают корутины и события, инспектор пишет, что скрипт, который это все выполняет был удален (MissingReferenceException), но вот только он есть в инспекторе и он вызывает эту ошибку, складывается ощущение, что после перезагрузки ссылка на самого себя в скрипте остается ссылаться на старый (удаленный) объект.
Ответы (1 шт):
Надо отписываться в OnDisable
или в OnDestroy
: _ссылкаНаЭклемплярКласса.ИмяСобытия -= Метод
или если событие статическое: ИмяКласса.ИмяСобытия -= Метод
.
Пример: _linkClass.StartAction -= Print
или Class.StartAction -= Print
.
Если этого не делать, то событие пытается вызвать слушателя, которого не существует, естественно ты получишь ReferenceException
. Экземпляры классов в C# не будут удалены сборщиком мусора, пока на них хоть кто-то ссылается.