事件event
事件是一个特殊的委托或者理解为事件内部是由委托实现的
事件只能通过-=,+=添加方法(事件处理),不能=赋值
事件只能在类中触发,不能由其他的类触发,其他类只能用-=,+=添加删除方法来控制事件的处理,触发事件时在调用添加进去的方法
创建一个事件需要用到event关键字
public delegate void ClickAction();
public static event ClickAction OnClicked;
在创建事件时,先要申明一个无参无返回值的委托类型
在event关键字后添加刚刚申明的委托类型,前面申明为公开且为静态的,使其能在其他类中添加方法
监听按钮在点击按钮时触发该事件
例如添加一个gui画布,然后在画布上添加一个按钮,为其添加一个事件
public delegate void ClickAction();
public static event ClickAction OnClicked;
// Start is called before the first frame update
void OnGUI()
{
if (GUI.Button(new Rect(Screen.width / 2 - 50, 5, 100, 30), "Click"))
{
if (OnClicked != null)
OnClicked();
}
}
在其他两个对象中为其添加color_select方法
void Start()
{
event_ex.OnClicked += color_event;
}
void color_event() {
float a = Random.Range(0, 1f);
float b = Random.Range(0, 1f);
float c = Random.Range(0, 1f);
GetComponent().material.color =new Color(a,b,c);
}
实现效果就是点击按钮后,随机改变对象颜色
运用事件,就不用在多个对象内写判断,以后需要添加方法时,也不需要回去找文件,只需要在该事件下+=一个方法即可,例如玩家角色死亡时,对其他对象进行操作,只需要写一个玩家角色死亡的事件,然后在各个对象在该事件中添加方法即可