Unity委托转换问题

时间:2015-10-31 18:46:21

标签: c# unity3d delegates event-listener

我在Unity上遇到问题:

我尝试用委托创建一个事件监听器,我从教程中获取代码,但是当我尝试将委托方法添加到另一个类方法时,我遇到了一个错误:“无法隐式转换类型void' to Metronome.OnTickEvent”。

这是我的班级代表:

public delegate void OnTickEvent();
public event OnTickEvent onTick;

IEnumerator coroutineMetronome() {
    if (CustomTimer.manager.timerState) {
        for (;;) {
            nextTick += delay;
            yield return new WaitForSeconds(nextTick - Time.time);

            onTick(); // I call the delegate method here 
        }
    }
}

......那就是事件接收者类:

protected virtual void Start ()
{
    manager = this as T;

    Metronome.manager.onTick += OnSynchronization(); // Here is the bug line
}

protected void OnSynchronization() {
    Debug.Log("coucou");
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

您不需要在方法名称后面加上括号:

Metronome.manager.onTick += OnSynchronization;

使用括号表示您希望先调用方法,然后将结果添加到事件中。

更正后的代码是

的简短版本
Metronome.manager.onTick += new OnTickEvent(OnSynchronization);