【发布时间】:2017-06-29 06:21:20
【问题描述】:
我一直在尝试对游戏的输入使用事件处理。当看到其他人使用类似的方法时,他们能够在委托变量中添加一个 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!");
}
}
使用委托进行事件处理对我来说仍然有点陌生,所以我认为我误解了一些东西。
【问题讨论】:
-
与其创建自己的委托,不如考虑使用 EventHandler。 msdn.microsoft.com/en-us/library/…
-
@RandRandom 这样做有什么先天优势吗?
-
使用
EventHandler的唯一优势是它强制执行object sender, EventArgs e的标准.NET 事件模式签名。否则,它与使用标准委托相同。 -
@RichardMcilwain 对我来说唯一真正的原因是,我是一个懒惰的混蛋,更喜欢使用 EventHandler 而不是编写自己的委托。我只是想用我的懒惰感染你。 :)
标签: c# delegates event-handling