Unity Events
¶ Кнопка
Простое использование событий для локального применения. Кнопка открывающая дверь и подобные триггеры.
Код кнопки, которая создаёт событие:
using UnityEngine.Events;
public class Button : MonoBehaviour
{
public UnityEvent OnPressed;
private void OnTriggerEnter(Collider2D collider)
{
OnPressed.Invoke();
}
}
Скрипт цепляется к объекту в испекторе и в нём указывает объект куда будет послан сигнал и метод, этого объекта, который отреагирует на этот сигнал.
Код двери или другого объекта, который реагирует на сигнал:
public class Door : MonoBehaviour
{
private bool isOpen;
// метод, который принимает сигнал
public void Open()
{
isOpen = true;
}
void Update()
{
if(isOpen)
{
// открыть дверь
}
}
}
¶ Менеджер событий
Для более сложных ситуаций требуется менеджер:
using UnityEngine.Events;
public class GlobalEventManager
{
public static UnityEvent<int> OnEnimyKilled = new UnityEvent<int>();
public static void SendEnemyKilled(int remainingCount)
{
OnEnimyKilled.Invoke(remainingCount);
}
}
Код объекта, который принимает сообщения:
public class KilledText : MonoBehaviour
{
private int killed = 0;
private void Awake()
{
GlobalEventManager.OnEnimyKilled.AddListener(EnimyKiled);
}
private void EnimyKilled(int remainingEnemies)
{
killed++;
GetComponent<Text>().text = "Remain: "+remainingEnemies;
}
}
Генерируются события вызовом:
GlobalEventManager.SendEnemyKilled(num);