Почему в этом случае консоль выдает ошибку NullReferenceException?

Консоль выдает ошибку при завершении игры. "Не установлена ссылка на экземпляр объекта". Ругается вот на этот участок кода:
public void OnDestroy()
{
	if (Application.isPlaying)
	{
		InputManager.instance.RemoveWeapons(this);
	}
}


Суть в том, что объект, на котором висит скрипт, может удалятся во время игры. Но так же объект удаляется, когда сцена деактивируется. Когда сцена деактивируется, никаких действий выполнять не надо, поэтому есть условие, которое должно защищать от этого:
if (Application.isPlaying) { }

Добавил в условие следующую строчку:
Debug.Log(Application.isPlaying);

При завершении игры в консоль постоянно выводится true, хотя, как я понял, это свойство должно возвращать в этот момент false. Еще, в один из нескольких раз, при прочих равных сообщение об ошибке не выводится, но при этом все равно true.

В чем тут может быть дело?
Надеюсь, описал читабельно. Заранее спасибо за помощь.
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Unity Game Engine
Дело ровно в том, что у вас что то равно null.
Что конкретно - покажет дебаггер, но 99% что это instance у InputManager.

При завершении игры в консоль постоянно выводится true, хотя, как я понял, это свойство должно возвращать в этот момент false

деактивация сцены никак не связана с этим свойством. Почитайте мануал.

Для решения проблемы есть два варианта:
- проверить instance на null
- пересмотреть архитектуру, чтобы таких вызовов небыло.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы