gpt4 book ai didi

c# - 如何通过委托(delegate)使用 void 函数?

转载 作者:行者123 更新时间:2023-11-30 15:57:35 25 4
gpt4 key购买 nike

我一直在尝试对游戏的输入使用事件处理。当看到其他人使用类似的方法时,他们可以在委托(delegate)变量中添加一个 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!");
}

}

使用委托(delegate)进行事件处理对我来说还是有点陌生​​,所以我想我误解了什么。

最佳答案

您需要在 Move 之后删除 ()。就像你正在调用你的方法并尝试添加它的返回类型,它什么都不是。只需将其更改为以下内容即可。

CharacterView.OnAxisChange += Move;

CharacterView.OnAxisChange -= Move;

关于c# - 如何通过委托(delegate)使用 void 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44817708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com