NGUI 事件监听的原理

这是我第二次写博客了,想想还有点小激动!

学习NGUI一段时间了,这几天心血来潮的对NGUi的事件监听的由来比较感兴趣。然后花了点时间看了一下,有种原来如此的感觉。


我先写一段NGUI事件监听的代码:

public class NGUIClickTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
		UIEventListener.Get (gameObject).onClick = DebugLog;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void DebugLog(GameObject obj){
		Debug.Log ("NGUI EventListener " + obj.name);
	}
}

这是一个简单的事件监听。 其实NGUI的事件原理还是挺简单的,看看NGUI是怎么实现事件监听的,我简单的来看看onClick是怎么实现的。我写了一段简单实现onClick的代码


public class MyEventTrigger : MonoBehaviour {
	public delegate void VoidDelegate (GameObject go);

	public VoidDelegate onClick;

	void OnClick ()					{ if (onClick != null) onClick(gameObject); }
	
	static public MyEventTrigger Get (GameObject go)
	{
		MyEventTrigger listener = go.GetComponent<MyEventTrigger>();
		if (listener == null) listener = go.AddComponent<MyEventTrigger>();
		return listener;
	}
}

再来一个触发的脚本:


public class MyEventClickTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
		MyEventTrigger.Get (gameObject).onClick = MyClick;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void MyClick(GameObject obj){
		Debug.Log ("MyEventTrigger " + obj.name);
	}
}




事实证明是ok的。原理很简单


我们通过MyEventTrigger 的get函数,将我要点击触发的函数 MyClick加到要触发对象的委托上去了。如下图所示,



其中标1 的是 获取 对象上的组件,没有就自己添加,标2 的是我申明的委托,我们之间把点击触发的函数的就是加到这个委托中去的,然后通过标 3 的 OnClick函数去触发执行我们之前所加的委托,就是我们点击要执行的函数。

回顾一下之前的代码,我们通过MyEventTrigger.Get (gameObject).onClick 获取到我们要触发点击函数对象上的委托onClick ,然后把MyClick这个函数赋值给这个委托,然后就可以通过我们点击去触发。OnClick的原理就是这样子的,NGUI的其他的比如OnDrag之类的原理都是这样的,有兴趣的话,可以自己研究一下。

这篇博客到这里就结束了,下一篇博客我将讲述一下 NGUI 各种事件触发函数的由来,如我们点击一个精灵,为什么会执行OnClick函数,而不是执行别的函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值