Как я могу предотвратить в Unity эту ситуацию (A должен реагировать на событие C, но A знает экземпляр B, а B знает экземпляр C): В ситуации ниже A создает экземпляры B, которые создают экземпляры из C, теперь C - это элементы пользовательского интерфейса с кнопками, которые получают событие при нажатии. В этом случае B просто «передает событие» A, который должен реагировать на событие. Я хочу попытаться избежать этого. Одним из решений может быть создание синглтона "eventManager", который отправляет все события зарегистрированным объектам ... но мне не очень нравится синглтон.
Class A : Monobehaviour
{
Start()
{
GameObject bGO = InstantiateGameobject();
B b = bGO.GetComponent<B>();
b.m_onButtonClicked += DoSmthinA;
}
private DoSmthinA
{
Log("A";)
}
}
Class B : Monobehaviour
{
public event System.Action m_onButtonClicked;
Start()
{
GameObject cGO = InstantiateGameobject();
C c = cGO.GetComponent<C>();
c.m_onButtonClicked += DoSmthinB;
}
private DoSmthinB
{
Log("B";)
m_onButtonClicked?.Invoke();
}
}
Class C : Monobehaviour
{
public UnityEngine.UI.Button m_button;
public event System.Action m_onButtonClicked;
Start()
{
button.onclick.addlistner(OnButtonCLicked);
}
private OnButtonCLicked
{
Log("C";)
m_onButtonClicked?.Invoke();
}
}