Простая система событий в Unity
Я пытаюсь использовать систему e, vent в Unity (способ C #), но у меня возникают проблемы с ее реализацией.
В большинстве примеров показан один класс, в котором вы определяете обработчик; затем вы пишете в том же классе функцию, соответствующую сигнатуре обработчика, и вы пишете события как статические
public class EventExample : MonoBehaviour
{
public delegate void ExampleEventHandler();
public static event ExampleEventHandler OneDayPassed;
public static void NextTurn()
{
// do stuff then send event
if (OneDayPassed != null)
OneDayPassed();
}
}
Затем в другом классе вы подписываетесь на события, создавая функцию, которая на самом деле что-то делает
public class EntityWatcher: MonoBehaviour
{
void Start()
{
EventExample.OneDayPassed += this.PrepareNextDay;
}
public void PrepareNextDay()
{
// Do other stuff that happen after the day is done
}
}
Пока проблем нет, но я не уверен, как мне это спроектировать, поэтому любой GameObject определенного типа подпишется на это событие. Например, если у вас есть категория сотрудников GO, которая работает с 8 до 6, и вы создаете их экземпляр во время выполнения; я должен подписаться на основной класс этой категории, или я должен создать скрипт, который я присоединяю к префабу Game Object, который подписывается на событие?
Цель состоит в том, чтобы все сотрудники, которые должны были делать 8–6 смен в спортивном центре, знали, когда начнется событие «день закончен», но я не хочу подписываться на каждый префаб, который я создаю.
Насколько я понимаю, я должен прикрепить сценарий с необходимым кодом на сборном, но я не могу найти практический пример, который показывает, действительно ли это способ сделать это.