Unity,从 Button onClick 调用 IEnumerator 函数

Unity, Calling a IEnumerator function from Button onClick

我尝试通过单击按钮调用 IEnumerator 函数,这样我就可以生成 return 一些东西,但我无法从检查器的 On Click() 下拉菜单中选择该函数。

我试图从另一个函数调用 IEnumerator 并将该函数分配给按钮,但不起作用!

显然我无法在 void 函数中执行 yield return

那么请教我该怎么做!?

非常感谢!

有一定的规则可以将函数挂接到检查器的统一事件。

1) 函数必须是 public 才能从检查器中选择它。

2) return 类型必须是 void,因此您将无法选择任何 return 类型的函数,并且由于您的 IEnumerator 函数return一个IEnumerator,您将无法从检查器中选择它。

3) 函数参数必须匹配事件参数,除非 UnityEvent 不带任何参数,如 Button.onClick 事件(感谢@derHugo 更正),例如按钮 onClick 事件不'采用任何参数,因此要从检查器中为其选择一个函数,该函数必须看起来像

public void ChoosableTemplateForOnClickButton() { }

但是您想从检查器调用 IEnumerator,所以您可以做的是将它包装在一个 void 函数中:

假设您的 IEnumerator 函数看起来像

public IEnumerator MyRoutine()
{
   yield and enjoy...
}

将它包装在一个 void 函数中:

public void RoutineWrap()
{
   StartCoroutine(MyRoutine());
}

现在您可以从检查器中选择RoutineWrap

作为 的替代方法,您也可以随时通过脚本在运行时添加回调。

仍然在 Unity 中,每个协程都必须使用 StartCoroutine:

启动
public Button button;

private void Awake()
{
    button.onClick.AddListener(() => StartCoroutine(MyRoutine()));
}

private IEnumerator MyRoutine()
{
    ...
}