【Unity3D API的学习与使用】Unity中的事件响应——UnityEvent

在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 API的学习与使用】Unity中的事件响应——UnityEvent_第1张图片

点击静夜思按钮后,控制台输出了“床前明月光,疑是地上霜.”

你可能感兴趣的:(unity3d,机制,响应,事件响应,UnityEvent)