【问题标题】:Coroutine execute code during WaitForSeconds协程在 WaitForSeconds 期间执行代码
【发布时间】:2019-07-28 01:44:52
【问题描述】:

我正在生成预制件并使用协程,但我可以看到在 yield return new WaitForSeconds(2.3f); 之前运行的函数的预制件之间存在随机延迟或空间间隙;

IEnumerator SpawnObject()
{
    while (true)
    {
        GameObject screenShape = (GameObject)Instantiate(screenlines, new Vector3(ShapespawnerObjPos.transform.localPosition.x, shapeposition[GetFirstIndexlistofIntShapePosition()], ShapespawnerObjPos.transform.localPosition.z), transform.rotation);

        //function get random number with checking called here 

        yield return new WaitForSeconds(2.3f);
    }
}

我打算做的是执行函数获取随机数,并在 WaitForSeconds() 期间检查而不是在它之前以避免预制件之间的随机空间间隙。

【问题讨论】:

  • 对不起,我没有关注。检查随机数与WaitForSeconds 有什么关系?
  • 我只是想在协程等待期间运行一个函数
  • 这正是等待工作的方式。您可能可以使用 lambda 匿名函数使用 WaitWhileWaitUntil 来解决它,然后您必须手动计算时间。
  • 为什么不将函数写入另一个协程并在WaitForSeconds之前启动该协程?

标签: c# unity3d game-development


【解决方案1】:

WaitForSeconds 在您所说的秒数内停止执行该方法。 在那段时间你不能执行任何东西,这是 WaitForSeconds 试图避免的(执行代码)。

您应该尝试完成代码,但如果延迟是由计算造成的,我建议您在 Start 方法中创建一个生成数字的数组/列表,并使用该列表而不是在“运行时”计算它。 .. 每次用完数字时,您都可以在该列表上循环或生成一个新列表,您仍然可以避免生成该计算的多个实例,这样,您应该能够避免随机延迟。

不过,请记住,我只看到了您的部分代码,所以我无法确定延迟的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多