Delegate/Action/Event/UnityAction/UnityEvent 区别与使用场景

发布时间 2023-08-31 15:05:55作者: 青叶煮酒
  1. 委托(delegate)
    event / Action 的底层实现,适用性最广。

  2. 事件(event / UnityEvent)
    对委托的封装,受限制的委托。具体表现为:
    (1)定义事件的类中,才可以进行 =null / Invoke() 操作。
    (2)外部类可以进行 += / -= 操作,但不能进行 =null / Invoke() 操作。

  3. Action / Function
    Action:无参数无返回值的委托,相当于一个语法糖(定义无参数无返回值的委托时,如果懒的取名字就用它)。

     Func:与 Action 类似,但是可以有返回值。

     

  4. UnityEvent / UnityAction
    UnityEvent:Unity 封装事件(好处是脚本挂载到对象后可在 Inspector 面板添加处理函数)

     

    UnityAction:Unity Action(定义和 C# Action 没有任何区别,但 UnityEvent 的 AddListener() 只接受该类型参数。大概是为了命名的统一性吧?)


  5. 参考文档
    委托与事件