Для начала я настоятельно рекомендую прочитать документацию C# от Microsoft , включая как публиковать sh события .
TLDR - это то, что вы просто нужно вызвать onLoadDoc();
в вашем firebasescript, чтобы вызвать событие. Вы также, вероятно, захотите проверить на нулевое значение в случае:
if (onLoadDoc != null) {
onLoadDoc();
}
Вы также захотите отписаться от слушателя в OnDestroy
, в противном случае есть очень хороший шанс, что вы получите нулевое значение ссылаться на исключение, как Unity переопределяет нуль и опирается на лежащие в основе C ++ logi c (обратите внимание, что в нормальном C# фреймворке это все еще утечка памяти, даже если она не обнуляется):
void OnDestroy() {
firebasescript.onLoadDoc -= DocLoaded;
}
Еще один совет: если вы работаете в Unity, вы, вероятно, захотите использовать UnityEvent , а не C# события. В моем собственном тестировании я нашел это немного менее эффективным. Положительным моментом является то, что он знает о жизненном цикле Unity (когда объекты go равны нулю / когда вызывается OnDestroy), вам не нужно выполнять проверку нуля перед вызовом, и вы можете подключить их в редакторе. Этот последний бит очень полезен при итерации вашего игрового дизайна или для включения менее технических членов вашей команды.
Вы бы изменили объявление поля, чтобы оно выглядело примерно так:
public UnityEvent OnLoadDoc = new UnityEvent();
You я бы вызвал его с помощью:
OnLoadDoc.Invoke();
И вы можете добавить слушателя с помощью:
OnLoadDoc.AddListener(DocLoaded);
Я обнаружил, что отписаться не нужно с UnityEvent
, но это все еще хорошая практика (и, вероятно, немного повышение производительности):
OnLoadDoc.RemoveListener(DocLoaded);
Еще одна вещь, которую я могу предложить: вы можете использовать UniRx , чтобы добавить реактивные функции в вашу игру Firebase , Я не самый большой поклонник реактивного программирования, но большинство моих коллег действительно в курсе, и он дает вам мощные функции для управления тем, как события создаются, агрегируются и отправляются.
- Патрик