项目中有时需要同时调用多个对象中的多个方法,每次调用都一个个列出所需要的函数,那代码自然冗余且不易于维护,所以【委托和事件】就显得很有用了。
委托可以理解为若干方法的地址,可以删减和调用,可以通过+=进行多播,当然也可以-=进行删除,实现管理。
事件则是基于某种委托类型的对象,即委托是一种类型,而事件或者委托实例是一种对象。
但事件的声明有时也很麻烦,因此C#系统自带了Action和Func关键词,可以简化事件的声明。
比如控制鼠标点击,通畅的做法是单独建一个mouseController:
// 设置事件 OnMouseClick
public event Action<Vector3> OnMouseClick;
public event Action<GameObject> OnEnemyClick;
void MouseControl()
{
if(Input.GetMouseButtonDown(0) && hitInfo.collider != null)
{
if (hitInfo.collider.gameObject.CompareTag("Ground"))
OnMouseClick?.Invoke(hitInfo.point);
// onMouseClick? (?即为判断该事件是否触发,可选触发)
else if (hitInfo.collider.gameObject.CompareTag("Enemy"))
OnEnemyClick?.Invoke(hitInfo.collider.gameOb