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);