如何解决使用WaitForSeconds的正确方法是什么?在IEnumerator函数中?
所以我正在尝试制作塔防游戏。该代码段应该使文本缓慢变化以使其看起来像这样;
为新的浪潮做好准备! 波传入。 波进来.. 波传入... 浪0
当前,发生的事情是,当我开始挥手时,点迅速过去,并立即变为“ Wave 0”,我试图在WaitForSeconds()中更改浮点;没有任何效果。我该如何正确使用它,因此在每次更改字符串之前要等待一秒钟。
IEnumerator waveIncomingText()
{
for (int i = 1; i <= 4; i++)
{
switch (i)
{
case 1:
new WaitForSeconds(4f);
yield return waveNumberText.text = "Wave Incoming.";
break;
case 2:
new WaitForSeconds(4f);
yield return waveNumberText.text = "Wave Incoming..";
break;
case 3:
new WaitForSeconds(4f);
yield return waveNumberText.text = "Wave Incoming...";
break;
case 4:
new WaitForSeconds(4f);
yield return waveNumberText.text = "Wave " + waveIndex.ToString();
break;
}
}
}
解决方法
正确的语法是yield return new WaitForSeconds(4f);
,而不是将yield return
放在另一条语句上。
IEnumerator waveIncomingText()
{
for (int i = 1; i <= 4; i++)
{
switch (i)
{
case 1:
yield return new WaitForSeconds(4f);
waveNumberText.text = "Wave Incoming.";
break;
case 2:
yield return new WaitForSeconds(4f);
waveNumberText.text = "Wave Incoming..";
break;
case 3:
yield return new WaitForSeconds(4f);
waveNumberText.text = "Wave Incoming...";
break;
case 4:
yield return new WaitForSeconds(4f);
waveNumberText.text = "Wave " + waveIndex.ToString();
break;
}
}
}
有关更多详细信息,请参阅文档:https://docs.unity3d.com/ScriptReference/WaitForSeconds.html
编辑:
针对您的多协程问题的其他帮助,请参见以下评论:
查看代码的这一部分:
void Update()
{
if (countdown <= 5)
{
StartCoroutine(waveIncomingText());
}
...
countdown -= Time.deltaTime;
每帧更新都会被调用。因此,您要检查每一帧是否countdown <= 5
,如果是,则启动协程。这意味着,在启用此单行为5秒钟后,每帧都将启动协程。
显然,这不是您的意图,所以我们需要一种仅触发一次此代码路径的方法。可以使用以下方式完成此操作:
private bool showIncomingWaveText = true;
void Update()
{
if (showIncomingWaveText && countdown <= 5)
{
showIncomingWaveText = false;
StartCoroutine(waveIncomingText());
}
然后,当您重置wave时,还可以重置showIncomingWaveText
变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。