C# WaitforSeconds不完全等待Unity中指定的时间

C# WaitforSeconds不完全等待Unity中指定的时间,c#,unity3d,ienumerator,C#,Unity3d,Ienumerator,我搜索使用WaitforSeconds,并按照前面提到的那样使用(使用IEnumeration的返回类型,并使用协同路由而不是更新)。但它没有起作用。最初它显示waitforseconds和IEnumerator“在当前上下文中不存在”。我不得不重新安装unity来修复它,但这个问题仍然存在。下面是我的代码。我是否以正确的方式使用WaitforSeconds?是不是“如果”代码块破坏了我的全部工作(我的意思是我在错误的地方使用了它) 使用UnityEngine; 使用系统集合; 公共类灌肠者:单

我搜索使用WaitforSeconds,并按照前面提到的那样使用(使用IEnumeration的返回类型,并使用协同路由而不是更新)。但它没有起作用。最初它显示waitforseconds和IEnumerator“在当前上下文中不存在”。我不得不重新安装unity来修复它,但这个问题仍然存在。下面是我的代码。我是否以正确的方式使用WaitforSeconds?是不是“如果”代码块破坏了我的全部工作(我的意思是我在错误的地方使用了它)

使用UnityEngine;
使用系统集合;
公共类灌肠者:单一行为
{
公共浮点数xmin,xmax,zmin,zmax;
公众游戏对象敌人;
公共浮动等待、StartWait、waveWait;
公众人数;
公共国际电子账户;
int i=0;
无效更新()
{
start例程(waves());
}
IEnumerator()
{
while(true)
{  
Vector3位置=新Vector3(Random.Range(xmin,xmax),0.5f,Random.Range(zmin,zmax));
返回新的WaitForSeconds(StartWait);
while(i=计数)
{
i=0;
}
//Debug.Log(“WAVE等待后检查,时间值为:“+time.time”);
//Log(“while循环外的i值为:“+i”);
}
}
}
代码需要在生成每个炮塔之前等待生成,并在生成下一个波之前等待wavewait。虽然Startwait运行良好,但我仍然无法发现其他人的问题


提前谢谢

您的代码是正确的,除了

void Update()
{
    StartCoroutine (TurretWaves());
}
通过这样做,您将在每个帧中创建一个新的协程。因此,在Startwait秒后,每个正在运行的协同程序将在以下帧中生成一个敌人,使整个脚本无法正常工作。但是,事实上,每个协同程序都按照您的预期工作

要解决你的问题,改变

void Update()

这样,只启动一个协同程序。它应该像预期的那样工作

编辑#1:

我认为您误解了协同程序在Unity中的工作方式,因为您似乎在使用
Update
逐帧手动执行协同程序中的代码

当协同程序由
startcroutine
启动时,一个“任务”将在Unity中注册。此任务类似于另一个线程(除了它仍在主线程中)。Unity将自动执行此任务中的代码。当它遇到
yield
语句时,它会暂停并等待该语句结束。(在内部,它会连续检查状态并确定何时应该恢复。)例如,
yield return new WaitForSeconds(n)
将使Unity在
n
秒内暂时停止在协同程序内执行代码。在那之后,它将继续下去


任务将被取消注册,直到不再执行任何代码(在您的情况下,由于while循环,任务永远不会结束),或者启动协同程序的游戏对象被销毁或停用。

是因为当代码“等待秒()”时,它会在WaitforSeconds()之前连续运行代码块吗行?@AbhishekSinha否。在给定的秒数过去之前,它不会做任何事情(或在内部不影响任何你能看到的东西)。请查看编辑部分。这可能是你真正需要的。:)
void Update()
void Awake()
void Start()