Проблема с отменой подписки на событие OnDisableC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с отменой подписки на событие OnDisable

Сообщение Anonymous »

Я регистрирую события в OnEnable и отменяю их регистрацию в OnDisable. В большинстве случаев это работает, но у меня есть один простой скрипт, который вызывает исключение MissingReferenceException: объект типа «GraphicsSwitch» был уничтожен, но вы все еще пытаетесь получить к нему доступ., когда я загружаю новую сцену и вызываю событие нажав кнопку.

Я знаю, что OnDisable вызывается, как я проверил с помощью Debug.Log. Событие не вызывается в новой сцене до того, как я нажму кнопку в новой сцене.

После добавления if (this != null) возникает ошибка ушел. Проверка того, имеет ли gameObject значение null, не работает. Похоже, что событие не отписывается и метод вызывается для уничтоженного объекта из предыдущей сцены.

Код очень простой:

Код: Выделить всё

private void OnEnable()
{
AdjustGraphics();
GameSettings.GraphicsChanged += AdjustGraphics;
}

private void OnDisable()
{
GameSettings.GraphicsChanged -= AdjustGraphics;
}

private void AdjustGraphics()
{
//without this line I get the error
if (this != null)
gameObject.SetActive(GameSettings.Graphics >= requiredQuality);
}
Метод AdjustGraphics не следует вызывать в новой загруженной сцене. Я думал объекты должны быть отписаны без каких-либо задержек. Я что-то упускаю, когда речь идет об отмене подписки на события?

Я знаю, что объекты в Unity не уничтожаются сразу, но OnDisable вызывается вовремя, поэтому мой скрипт/объект больше не должен прослушивать событие GameSettings.GraphicsChanged при загрузке новой сцены.

Подробнее здесь: https://stackoverflow.com/questions/583 ... -ondisable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как справиться с возвратом средств за покупку Flutter в приложении или отменой подписки
    Гость » » в форуме IOS
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость
  • Как мне убедиться, что «это» не является нулевым внутри ondisable () при остановке игры?
    Anonymous » » в форуме C#
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Проблема с отменой задачи в ASP.NET
    Гость » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость
  • EventBus с отменой развертывания
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Итерация IAsyncenumerable в функции, возвращающей IAsyncenumerable с отменой
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»