Подскажите пожалуйста.
Есть класс EventController.
В нем объявляются делегаты
Синтаксис:
Используется csharp
public delegate void ChangePlayerState(int value);
public class EventController : MonoBehaviour
{
private static EventController _singleton;
public static EventController Singleton
{
get
{
if (_singleton == null)
{
_singleton = GameObject.FindObjectOfType<EventController>();
}
return _singleton;
}
}
public ChangePlayerState d_ChangePlayerState;
public class EventController : MonoBehaviour
{
private static EventController _singleton;
public static EventController Singleton
{
get
{
if (_singleton == null)
{
_singleton = GameObject.FindObjectOfType<EventController>();
}
return _singleton;
}
}
public ChangePlayerState d_ChangePlayerState;
Далее в другом классе подписываемся на делегат.
EventController.Singleton.d_ChangePlayerState += ChangePlayerState;
Все хорошо работает. Вот только когда останавливаем игру, вылетают ошибки
NullReferenceException: Object reference not set to an instance of an object
Понятно, что уничтожается обьект EventController.
В классе EventController я добавил ещё делегат. public DelateEventController d_DestroyEventController;
И в методе OnDestroy() в классе EventController вызываю этот делегат.
Подписчики подписываются
EventController.Singleton.d_DestroyEventController += DestroyEventController;
void DestroyEventController()
{
EventController.Singleton.d_ChangePlayerState -= ChangePlayerState;
EventController.Singleton.d_DestroyEventController -= DestroyEventController;
EventController.Singleton.d_PushActionButton -= Action;
EventController.Singleton.d_GetBotFollow -= GetBotFallow;
}
Соответственно, до удаления этого обьекта все подписчики на делегат должны отписатся и не вызывать ошибки.
Но ошибки не исчезли. Что-то я не до конца понимаю...