首页 > 解决方案 > 避免 Unity UI 事件回调链

问题描述

我如何在 Unity 中防止这种情况(A 应该对 C 事件做出反应,但 A 知道 B 的实例并且 B 知道 C 的实例):在下面的情况下,A 创建 B 的实例来创建 C 的实例,现在 C 是 UI带有在单击时获取事件的按钮的元素。在这种情况下,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();
    }
}

标签: unity3duser-interfaceevents

解决方案


推荐阅读