在使用NGUI的事件处理时,发现UIButton和UIEventListener之间的共同点越来越多。
当然处理事件,也有一些其它的函数,比如:UIEventTrigger,ButtonMessage 等等,但我用的最多的就是UIButton和UIEventListener
我们知道,只要一个GameObject上添加了Collider(BoxCollider)并且它放在UICamera所渲染的Layer下,
那么当你在脚本中写OnClick()函数时,当我们单击这个Collider时,就会触发这个OnClick()函数。
using UnityEngine; using System.Collections; public class ClickTest : MonoBehaviour { void OnClick() { CBase.Log("click"); } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
(图) 调用堆栈
因此,我们要使用UIEventListener 来响应UI事件,我们需要做两件事
1)给UI控件添加BoxCollider,同时添加UIEventListener脚本
2) 调用委托的方法
方法一:UIEventListener.Get(gameObject).onClick += MyClickFunction;
方法二: StartBtn.GetComponent<UIEventListener>().onClick = OnButtonClick;
UIEventlistener
UIEventlistener的源文件放在Scripts/Internal/下,可以这个脚本的重要性
打开这个脚本,可以看到里面写了很多的委托。
用法一:UIEventListener.Get(gameObject).onClick += MyClickFunction;
其实就是在执行OnClick() 方法,而OnClick()是VoidDelegate(Gameobject go)
用法二: StartBtn.GetComponent<UIEventListener>().onClick = OnButtonClick; void OnButtonClick(GameObject obj)
UIButton
基本上来说如果只是处理事件,可以用UIEventListener代替UIButton
UIButton中的这个功能 和以前2.X版本中的ImageButton功能非常相似
另附这篇文章写的很不错:使用UIEventListener响应NGUI事件
UIButton vs UIEventListener