以编程方式统一处理ngui的按钮事件

时间:2017-06-06 02:42:19

标签: c# button delegates ngui

我正在从Unity的UI转移到NGUI。

以前,我可以使用以下脚本添加监听器:

button.GetComponentInChildren<Button>().onClick.AddListener(() =>
{
    //codes that could be triggered by click the button. 
});

但是当改用NGUI时,我无法通过以下方式实现:

EventDelegate.Set(go.GetComponent<UIButton>().onClick, OnButtonClickActive);

private void OnButtonClickActive()
{
   Debug.Log("active button clicked");
}

1 个答案:

答案 0 :(得分:1)

最后,我通过使用以下脚本(使用OnClick)向UIEventListener添加自定义事件来完成此工作:

UIEventListener.Get(go).onClick += OnButtonClickActive;

事件处理程序定义如下:

private void OnButtonClickActive(GameObject go)
    {
        int level;
        int.TryParse(go.GetComponentInChildren<UILabel>().text, out level);
        Debug.Log(level + "active button clicked");
        ApplicationModel.CurrentLevel = ApplicationModel.Levels[level - 1];
        SceneManager.LoadScene("PlayScene");
    }

请注意,在游戏对象中使用UILable组件传递参数(级别信息)可能有点愚蠢。如果还有其他更优雅的方式,请告诉我。