C# 如何让协同程序像更新一样工作
有人告诉我,当我不需要使用更新时,我不应该使用更新。我不确定什么时候不使用它们,但我正在努力想办法 我想让一个事件“Wave”运行20秒,然后切换到一个随机的“Wave”,再运行20秒,并继续重复这个循环 游戏经理:C# 如何让协同程序像更新一样工作,c#,unity3d,coroutine,C#,Unity3d,Coroutine,有人告诉我,当我不需要使用更新时,我不应该使用更新。我不确定什么时候不使用它们,但我正在努力想办法 我想让一个事件“Wave”运行20秒,然后切换到一个随机的“Wave”,再运行20秒,并继续重复这个循环 游戏经理: void Start() { StartFireWaves(); } public void StartFireWaves() { StartCoroutine(wm.SelectWave()); } public IEnumerator SelectWave(
void Start()
{
StartFireWaves();
}
public void StartFireWaves()
{
StartCoroutine(wm.SelectWave());
}
public IEnumerator SelectWave()
{
float waitFor;
float diff = 0;
diff = nextWaveAT - Time.time;
if (diff <= 0f)
{
SpawnFlames();
waitFor = Random.Range(15, 20);
}
nextWaveAT = nextWaveAT + waitFor;
yield return new WaitForSeconds(waitFor);
}
波浪管理器:
void Start()
{
StartFireWaves();
}
public void StartFireWaves()
{
StartCoroutine(wm.SelectWave());
}
public IEnumerator SelectWave()
{
float waitFor;
float diff = 0;
diff = nextWaveAT - Time.time;
if (diff <= 0f)
{
SpawnFlames();
waitFor = Random.Range(15, 20);
}
nextWaveAT = nextWaveAT + waitFor;
yield return new WaitForSeconds(waitFor);
}
public IEnumerator SelectWave()
{
浮动等待;
浮动差=0;
diff=nextWaveAT-Time.Time;
如果(差值=.25f&&val<.5f)
{
Wave2();
}
如果(val>=.5f&&val<.75f)
{
Wave3();
}
其他的
{
Wave4();
}
}
我假设这是它应该如何工作的,但它似乎没有保持“更新”或运行。它只运行一次,然后什么也不发生。使用带有多个嵌套
的Coroutine
,而循环来执行此操作。第一个while
循环是使它永远运行,直到调用stopRunningWaves()函数为止。第二个while
循环用于在x时间内运行波形,然后跳回到第一个while
循环
bool keepRunningWaves = false;
IEnumerator startingRunningWaves(float second = 20)
{
if (keepRunningWaves)
{
yield break;
}
keepRunningWaves = true;
while (keepRunningWaves)
{
float timer = 0;
int randWave = Random.Range(1, 5);
while (timer < second)
{
if (!keepRunningWaves)
{
yield break;
}
if (randWave == 1)
{
Debug.Log("Running Wave 1");
Wave1();
}
else if (randWave == 2)
{
Debug.Log("Running Wave 2");
Wave2();
}
else if (randWave == 3)
{
Debug.Log("Running Wave 3");
Wave3();
}
else if (randWave == 4)
{
Debug.Log("Running Wave 4");
Wave4();
}
timer += Time.deltaTime;
yield return null;
}
//Reset Timer for next run
timer = 0;
yield return null;
}
keepRunningWaves = false;
}
void stopRunningWaves()
{
keepRunningWaves = false;
}
将Coroutine
与多个嵌套的while
循环一起使用可执行此操作。第一个while
循环是使它永远运行,直到调用stopRunningWaves()函数为止。第二个while
循环用于在x时间内运行波形,然后跳回到第一个while
循环
bool keepRunningWaves = false;
IEnumerator startingRunningWaves(float second = 20)
{
if (keepRunningWaves)
{
yield break;
}
keepRunningWaves = true;
while (keepRunningWaves)
{
float timer = 0;
int randWave = Random.Range(1, 5);
while (timer < second)
{
if (!keepRunningWaves)
{
yield break;
}
if (randWave == 1)
{
Debug.Log("Running Wave 1");
Wave1();
}
else if (randWave == 2)
{
Debug.Log("Running Wave 2");
Wave2();
}
else if (randWave == 3)
{
Debug.Log("Running Wave 3");
Wave3();
}
else if (randWave == 4)
{
Debug.Log("Running Wave 4");
Wave4();
}
timer += Time.deltaTime;
yield return null;
}
//Reset Timer for next run
timer = 0;
yield return null;
}
keepRunningWaves = false;
}
void stopRunningWaves()
{
keepRunningWaves = false;
}
我想让一个事件(波浪)运行20秒什么是(波浪)?然后换一个不同的。什么不同的?您的问题没有提供足够的详细信息,请获取帮助。我的回答提供了一种方法,可以在20秒钟内完成某件事,或者在提供的时间内完成某件事,然后再做另一件事。请重新表述您的问题,并解释您在20秒内想做什么,以及之后想做什么……需要反复重复整个循环选择一个波(运行20秒),选择一个波(运行20秒),等等……运行Wave1 20秒,Wave2 20秒Wave3,Wave4,然后再次重复?永远循环?否,随机选择(1到4)运行20秒;随机选择(1-4),运行20秒;随机选择(1-4)运行20秒。我希望这会有帮助。是的,不会。将更新我的答案以反映这一点。我想让一个事件(Wave)运行20秒什么是(Wave)?然后换一个不同的。什么不同的?您的问题没有提供足够的详细信息,请获取帮助。我的回答提供了一种方法,可以在20秒钟内完成某件事,或者在提供的时间内完成某件事,然后再做另一件事。请重新表述您的问题,并解释您在20秒内想做什么,以及之后想做什么……需要反复重复整个循环选择一个波(运行20秒),选择一个波(运行20秒),等等……运行Wave1 20秒,Wave2 20秒Wave3,Wave4,然后再次重复?永远循环?否,随机选择(1到4)运行20秒;随机选择(1-4),运行20秒;随机选择(1-4)运行20秒。我希望这会有帮助。是的,不会。将更新我的答案以反映这一点。如果每个波运行超过x秒,那是因为最后一个随机数与新/当前随机数相同。你有责任解决这个问题。谢谢你的帮助!stopRunningWaves如何触发keepRunningWaves为false?@TimCooleystopRunningWaves()
在我上面的示例中没有调用。当你想停止移动波浪时,你可以使用它。我不知道你什么时候想停止移动波浪。只有你知道。你说你想永远循环,但我添加它是为了让你停止循环并退出协同程序。@TimCooley刚刚修改它来修复一个bug。复制新代码。谢谢你的帮助。这一切都在起作用。现在我知道它是如何工作的了!如果每个波运行超过x秒,那是因为最后一个随机数与新的/当前的随机数相同。你有责任解决这个问题。谢谢你的帮助!stopRunningWaves如何触发keepRunningWaves为false?@TimCooleystopRunningWaves()
在我上面的示例中没有调用。当你想停止移动波浪时,你可以使用它。我不知道你什么时候想停止移动波浪。只有你知道。你说你想永远循环,但我添加它是为了让你停止循环并退出协同程序。@TimCooley刚刚修改它来修复一个bug。复制新代码。谢谢你的帮助。这一切都在起作用。现在我知道它是如何工作的了!