NGUI 按钮事件的几种监听方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaixh_89/article/details/82463268

一般我们在做游戏开发过程中都会遇到需要使用按钮的时候,通过点击按钮来实现某些需求,比如开始游戏,请求好友列表等等,今天我们就NGUI下按钮的几种响应方式做出总结:

一、直接响应

我们可以直接在当前对象的脚本上实现OnClick方法如下:

当然了,我们也可以将按钮响应指向当前脚本的其他方法(必须是public属性下方法,不然不可见)

缺点:不直观,效率比较低

二、使用SendMessage

选中当前按钮,选择AddComponent->NGUI->interaction->ButtonMessage为按钮添加UIButtonMessage脚本组件

Target:响应按钮消息的游戏对象。

Function Name:响应按钮消息的游戏对象的脚本方法

Trigger:按钮的响应方式,有单击,鼠标在按钮上、鼠标在按钮外、双击、按下鼠标、松开鼠标等方式

Include Children:是否让该对象的所有子对象也发送这个点击事件。

void Send ()
{
    if (string.IsNullOrEmpty(functionName)) return;
		if (target == null) target = gameObject;

		if (includeChildren)
		{
			Transform[] transforms = target.GetComponentsInChildren<Transform>();

			for (int i = 0, imax = transforms.Length; i < imax; ++i)
			{
				Transform t = transforms[i];
				t.gameObject.SendMessage(functionName, gameObject, SendMessageOptions.DontRequireReceiver);
			}
		}
		else
		{
			target.SendMessage(functionName, gameObject, SendMessageOptions.DontRequireReceiver);
		}	
}

可以看到就是通过对象调用SendMessage方法来实现的,这种方式比较古老,引擎现已不推荐使用

缺点:不适用于3D物体

3、直接在UIButton添加事件

这个方法和第一种sendMessage方式大同小异,但是较前者直观些。

缺点:效率略低,同样不适用于3d物体

4、Event Listener(推荐使用)

选中当前按钮,选择AddComponent->NGUI->interaction->ButtonMessage为按钮添加Event Listener脚本组件

这种方式你可以在任何脚本中实现按钮的点击事件,写法以下两种都行

void Awake()
    {
        //获取需要监听的按钮对象
        GameObject button = GameObject.Find("TestBtn");
        //设置这个按钮的监听,指向本类的ButtonClick方法中。
        //UIEventListener.Get(button).onClick = BtnClick;
        UIEventListener.Get(button).onClick = (obj) =>{
            Debug.Log("GameObject " + obj.name);
        };
    }

    //计算按钮的点击事件
    void BtnClick(GameObject button)
    {
        Debug.Log("GameObject " + button.name);

    }

这种方式,效率相对以上其他较好,管理方便,推荐使用

5、EventDelegate

这种方式最简洁,效率也较高,不用添加任何组件,只需讲代码挂载到任何对象上,并赋予btn需要响应的按钮对象

public class tet : MonoBehaviour {
    public UIButton btn;//这里必须是UIButton类型
    // Use this for initialization
    void Start()
    {
        EventDelegate.Add(btn.onClick, BtnClick);
    }
    public void BtnClick()
    {
        Debug.Log("GameObject ");
    }
}

猜你喜欢

转载自blog.csdn.net/zhaixh_89/article/details/82463268