在Unity3D中也有如同Java一样的实现事件注册机制的类,就是UnityEvent。
UnityEvent继承自UnityEventBase,主要通过三个函数实现对事件的注册与响应,示例:
#pragma strict
var event : Events.UnityEvent; //此处不能直接使用UnityEvent,需指明Events
function Start ()
{
event = new Events.UnityEvent (); //创建对象
event.AddListener(Hello); //注册事件
}
function OnGUI ()
{
if (GUILayout.Button("静夜思") && event != null)
{
event.Invoke (); //响应
}
}
function Hello()
{
Debug.Log ("床前明月光");
}
上述的示例就使用了UnityEvent三大函数中的两个(AddListener和invoke,一个注册事件,一个响应事件),还有一个RemoveListener,用于移除监听器。
UnityEvent的响应函数还可以传入参数,即使用UnityEvent<T>类(最多可以使用4个,即可使用到UnityEvent<T1,T2,T3,T4>),但因为这几个类都必须使用先继承才能使用,示例如下:
#pragma strict
class MyEvent extends Events.UnityEvent.<String>
{}
var event : MyEvent;
function Start ()
{
event = new MyEvent (); //创建对象
event.AddListener(Hello); //注册事件
}
function OnGUI ()
{
if (GUILayout.Button("静夜思") && event != null)
{
event.Invoke (",疑是地上霜。"); //响应
}
}
function Hello(s:String)
{
Debug.Log ("床前明月光"+s);
}
将脚本拖至控件运行后,控制台打印结果如下:
点击静夜思按钮后,控制台输出了“床前明月光,疑是地上霜.”
【Unity3D学习与使用】Unity中的事件响应——UnityEvent
原文:http://blog.csdn.net/zgljl2012/article/details/44610353