【问题标题】:How to Use IEnumerator Correctly when button calls multiple functions按钮调用多个函数时如何正确使用IEnumerator
【发布时间】:2019-02-11 03:38:37
【问题描述】:

我正在制作一个纸牌游戏,我试图在每张纸牌被实例化之前进行 (0.5f) 延迟。我有实例化和对象的代码

public IEnumerator Name(int x,int y, int z)
{

}    

在 IEnum 中,我在所有带有实例化的代码之前都有一个 yeild return new WaitForSeconds(0.5f)

我使用

在 2 个不同的类中调用我的 IEnumerator 2 次
StartCoroutine(Name(...par...));

在我的玩游戏按钮上,我有 4 个事件使用枚举来生成卡片,但没有延迟。

有没有办法让卡片一张一张地出现。

感谢您的支持。

【问题讨论】:

  • 既然 Unity 支持 Tasks,您可能应该考虑使用 async/await 而不是 Unity 协程。前者是 .NET 开发的标准,而协同例程是 Unity 的一项遗留发明,是对 yield/return 的滥用。
  • @MickyD O 我也会试试的。谢谢
  • “f”有多长?什么是 (0.5f) 延迟?
  • 0.5 秒。我只尝试了 1 或 2 也没有任何区别。我会测试新的方式,看看。

标签: c# unity3d coroutine ienumerator


【解决方案1】:

无论当前调用 StartCoroutine 的是什么,都必须是协程。

现在您的代码看起来/行为如下:

StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));

他们都在生成一张卡片,而不是互相等待。您不希望出现这种情况,因此您需要从根本上改变您的调用方式,以便获得这种行为:

StartCoroutine(SomeMethod(...));

IEnumerator SomeMethod(...) {
    yield return Name(...par...)
    yield return Name(...par...)
    yield return Name(...par...)
    yield return Name(...par...)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多