всем привет) наткнулся на один очень интересный баг, решил с вами поделиться - небольшой плюсец в копилочку понимания юньки)
есть сериализуемый класс, скажем класс А, со всякими данными, в том числе массивами.
в другом классе, скажем Б, есть приватная переменная типа А, но она не помечена как SerializeField, то есть в инспекторе её не видно. в разных местах класса Б я то назначаю этой переменной значение, то очищаю, и есть места где в зависимости от наличия значения в этой переменной типа А есть разветвления в коде.
столкнулся с таким - в том месте, где идет такое разветвление, к моменту когда эта переменная должна быть null, по факту она оказывается не null, и выстреливает исключение, т.к. в данных этой переменной все дефолтные значения и массивы null’ы. стал ковыряться, явно я откуда-то неожиданно ей что-то назначаю. наставил кучу бряк - ничего не срабатывает, я ей ничего не назначаю невовремя. превратил даже эту переменную в свойство, поставил бряку на сеттер - он не вызывается! хотя у переменной в определенный момент уже не null!
уже начинаю нервничать, перезапустил райдер, юньку, дошло до того что написал короткую корутину которая каждые полсекунды логирует значение этой переменной. всё также - она долгое время как положено null, и потом просто в какой-то момент хренакс и там лежит дефолтное значение!
в общем смотрел я на неё смотрел, и до меня дошло))
в классе Б также есть приватная несериализуемая булька, и я в процессе решения другой задачи хотел смотреть когда эта булька меняет своё состояние. для этого я включил инспектор в дебаг режиме, чтобы посмотреть приватные переменные.
как оказалось - и когда я это понял - очень очевидно и логично, - когда инспектор переключается в дебаг режим, он сериализует все приватные поля класса дефолтными значениями если их там нет, чтобы отобразить. это и назначало моей переменной значение. я охренел😁 вот такая вот история