0

我在 StrangeIoC 框架中绑定 ngui 事件时遇到了一些问题。

这是一个 unityGUI 示例:

public class TestView : View
{
    private readonly Rect buttonRect = new Rect(0, 0, 200, 50);
    public Signal buttonClicked = new Signal();

    public void OnGUI()
    {
        if (GUI.Button(buttonRect, "Test"))
        {
            buttonClicked.Dispatch();
        }
    }
}

这是 NGUI 版本:

public class NGUIView : View
{
    public UIButton Button;
    public Signal buttonClicked = new Signal();


    private void Start()
    {
        if (Button != null)
        {
            EventDelegate.Add(Button.onClick, buttonClicked.Dispatch);
        }
    }
}

在 NGUI 版本中,buttonClicked 永远不会被调度。我在场景中注意到该按钮上的 Notify 属性有一个空值。

这一个有效,但是 buttonClicked 被触发了几次:(

public class NGUIView : View
{
    public UIButton Button;
    public Signal buttonClicked = new Signal();


    void Update()
    {
        if (Button.state == UIButtonColor.State.Pressed)
        {
            buttonClicked.Dispatch();
        }
    }
}

您能告诉我您如何处理这种 NGUI-StrangeIoC 情况吗?谢谢!

4

1 回答 1

0

我终于想通了。添加委托Awake而不是Start.

现在这是完美的解决方案(不确定):

public class TestView : View
{
    private readonly Rect buttonRect = new Rect(0, 0, 200, 50);
    public UIButton Button;
    public Signal buttonClicked = new Signal();

    private void OnGUI()
    {
        if (GUI.Button(buttonRect, "Test"))
        {
            buttonClicked.Dispatch();
        }
    }

    private void Awake()
    {
        EventDelegate.Add(Button.onClick, buttonClicked.Dispatch);
    }
}
于 2014-10-15T01:36:54.647 回答