Unity Firebase удалить слушателя для облачной функции - PullRequest
0 голосов
/ 26 января 2020

У меня проблемы с выяснением, как удалить слушателя для облачной функции, которая запускается каждые несколько минут. У меня есть следующий код:

void InitializeFirebase() {
      FirebaseDatabase.DefaultInstance.GetReference ("Main").ValueChanged += ListenForServerTimestamp;
    }

void OnDisable() {
      FirebaseDatabase.DefaultInstance.GetReference("Main").ValueChanged -= ListenForServerTimestamp;
    }

Проблема в том, что даже по-прежнему зарегистрирован, даже когда Unity не работает. Ie кнопка воспроизведения выключена, она все еще регистрирует события. Я, должно быть, делаю что-то не так с удалением событий, но после просмотра всех других ответов я не могу понять, в чем проблема.

Спасибо.

Редактировать: Если есть какой-то способ отключите Firebase в Unity, я бы тоже попробовал. Но я не могу снова найти что-нибудь где-нибудь об отключении Firebase в Unity.

1 Ответ

1 голос
/ 30 января 2020

Моим лучшим предложением будет кэширование ссылки на вашу базу данных в сценарии, где вы ее извлекаете. Примерно так:

DatabaseReference _mainRef;

void InitializeFirebase() {
    _mainRef = FirebaseDatabase.DefaultInstance.GetReference ("Main");
    _mainRef.ValueChanged += ListenForServerTimestamp;
}

void OnDisable() {
    if(_mainRef != null) {
        _mainRef.ValueChanged -= ListenForServerTimestamp;
        _mainRef = null;
    }
}

Если вы проверите GetReference, вы увидите что-то подобное в ILSpy:

    public DatabaseReference GetReference(string path)
    {
      return new DatabaseReference(this.internalDatabase.GetReference(path), this);
    }

Так что вы можете удалить слушателя на объекте другой , чем тот, на котором вы его зарегистрировали.

Несколько других вещей, которые нужно перепроверить. Я бы порекомендовал вам сделать это на MonoBehaviour, а не на ScriptableObject. Поскольку вы упоминаете, что события запускаются, когда кнопка воспроизведения не нажата, я ожидаю, что это происходит в редакторе. ScriptableObject обычно ведет себя не так, как я ожидаю в редакторе, и может вызывать странные проблемы с воспроизведением / паузой.

Если он установлен на MonoBehaviour, я бы порекомендовал вам не устанавливать его на тот, который имеет атрибут [ExecuteInEditMode]. Вы также можете получить странное поведение, если вызываете некоторые из этих вызовов из сценария редактора (CustomEditor, PropertyDrawer и & c).

Я не думаю, что какой-либо из них (кроме ссылки) ваша проблема. Но стоит взглянуть еще на несколько вещей.

Надеюсь, это поможет!

- Патрик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...