【发布时间】:2026-02-01 02:50:01
【问题描述】:
我正在尝试编写一个非常简单的对话系统。当玩家获得一个对话框时,该对话框会一直存在,直到他们按下一个键。然后出现第二个对话框。再次,他们按下一个键,依此类推。
然而,我意识到我使用协程的方法不起作用,因为每个对话框都会同时显示。使用简化版本:
IEnumerator Test() {
//Code that displays a message
yield return StartCoroutine(WaitForKey(KeyCode.Space));
}
IEnumerator WaitForKey(KeyCode keyCode)
{
while (!Input.GetKeyDown(keyCode))
yield return null;
}
void start(){
StartCoroutine(Test());
StartCoroutine(Test());
}
上面代码的结果是显示了两条消息。另外,它们会立即显示——一旦满足条件,进程就会从那个coutine跳转到启动,运行下一行代码,并定期返回第一个协程以查看它是否已完成。
如何让一个协程在它继续执行其后的其余代码之前完成?
【问题讨论】:
-
你有想要在数组中显示的对话框吗?您如何按顺序设置对话框?这对我很有帮助。
-
@programmer:我没有任何数组,因为它是一种逐个基本函数。目前,每当我想弹出消息时,我都会使用:
StartCoroutine(dh.showMessage ("NameOfSpeaker", "Stuff I am saying")); -
就是这样;我事先不知道正文。我还不熟悉如何创建画布。我非常感谢您提供的所有帮助,尤其是您提供的所有代码,但我响应缓慢,因为我仍在尝试解析它。
-
除了创建一组画布之外,我什么都知道。这也不会使从文件中读取文本难以进行对话吗?