我一直在尝试将事件处理用于游戏的输入。当看到其他人使用类似的方法时,他们能够在没有错误的情况下向委托变量添加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!");
}
}
使用代理进行事件处理对我来说仍然有点陌生,所以我认为我误解了一些东西。
答案 0 :(得分:3)
您需要在()
之后移除Move
。就像你调用你的方法并尝试添加它的返回类型一样。只需将其更改为以下内容即可。
CharacterView.OnAxisChange += Move;
CharacterView.OnAxisChange -= Move;