事件Event
实现的类似观察者设计模式,一对多的通知。
相当于c++的函数指针的一个列表。
Event在UI上的事件回调用途很常见,代码如下:
public class EventManager : MonoBehaviour
{
public delegate void ClickAction();
public static event ClickAction OnClicked;
void OnGUI()
{
if(GUI.Button(new Rect(Screen.width / 2 - 50, 5, 100, 30), "Click"))
{
if(OnClicked != null)
OnClicked();
}
}
}
// 收到点击事件随机改变颜色
public class TurnColorScript : MonoBehaviour
{
void OnEnable()
{
EventManager.OnClicked += TurnColor;
}
void OnDisable()
{
EventManager.OnClicked -= TurnColor;
}
void TurnColor()
{
Color col = new Color(Random.value, Random.value, Random.value);
renderer.material.color = col;
}
}
事件和委托的区别
还是上面代码,如果去掉event关键字也工作正常,这就是委托了……
区别在于加了e