如何使用委托使用void函数?

时间:2017-06-29 06:21:20

标签: c# delegates event-handling

我一直在尝试将事件处理用于游戏的输入。当看到其他人使用类似的方法时,他们能够在没有错误的情况下向委托变量添加void函数。 每当我尝试将Move()函数添加到OnAxisChange时,我收到以下错误:

无法隐式转换类型' void'到' CharacterView.InputAction'

public class CharacterView : MonoBehaviour {
    public delegate void InputAction();
    public static event InputAction OnAxisChange;

    public Vector2 InputAxis
    {
        get
        {
            float x = Input.GetAxisRaw("Horizontal");
            float y = Input.GetAxisRaw("Vertical");
            return (new Vector2(x, y));
        }
    }

    private void Update()
    {

        Vector2 input = InputAxis;
        if (input.x != 0 || input.y != 0)
        {
            if (OnAxisChange != null)
            {
                OnAxisChange();
            }
        } 
    }
}

以下是处理事件的类。

public class CharacterController : MonoBehaviour {

    private void OnEnable()
    {
        CharacterView.OnAxisChange += Move();
    }
    private void OnDisable()
    {
        CharacterView.OnAxisChange -= Move();
    }

    public void Move()
    {
        Debug.Log("Entered the move function!");
    }

}

使用代理进行事件处理对我来说仍然有点陌生,所以我认为我误解了一些东西。

1 个答案:

答案 0 :(得分:3)

您需要在()之后移除Move。就像你调用你的方法并尝试添加它的返回类型一样。只需将其更改为以下内容即可。

CharacterView.OnAxisChange += Move;

CharacterView.OnAxisChange -= Move;