如何使用委托订阅事件

How to subscribe to an event with a delegate

我想订阅一个事件,以便在事件触发时我可以执行委托或匿名函数。

使用方法订阅事件很简单,我只需输入方法名称即可,效果很好:

UnityEngine.UI.Toggle tgl;
tgl.onValueChanged += myMethod;

但我无法使用相同的语法订阅委托。这行不通:

tgl.onValueChanged += delegate{ Debug.Log("Bang!"); };

我研究了这个 Q&A,它建议我尝试以下方法,但这也不起作用:

tgl.onValueChanged += (object sender, EventArgs e) => { Debug.Log("Bang!"); };

我怎样才能使这个工作?

在尝试订阅之前,您需要查看 onValueChanged 是什么类型。这是它的声明,取自 here.

public UI.Toggle.ToggleEvent onValueChanged;

它的类型是 ToggleEvent,是 class,不是事件也不是委托。因此,您不能对其使用 += 运算符。

您应该像示例那样调用 AddListener

tgl.onValueChanged.AddListener(delegate { ... })