我正在尝试获得一个模拟控制台的效果,因此玩家可以与之互动以获得乐趣。
我确实放置了一个用作背景的图像,并在顶部放置了一个文本游戏对象,它覆盖了大量的图像。我可以输入文本并更新文本,但如果键入了文本,它就不会真正看起来(光标不会闪烁,只要我更改.text值就会立即显示文本)。
有一种简单的方法来模拟键入和光标闪烁吗?我正在使用C#来实现这一目标。
我正在尝试添加一个循环,其中每500毫秒,我键入一个字符并刷新字符串,因此在更新函数中,如果文本是逐字符写的,它应该看起来像。
问题在于,根据我的记忆,更新功能按照自己的进度;所以这意味着它将以相同的速度打印每一行;如果输入文字,它就不会显示出来。
有关如何影响更新功能的任何建议? (旁边使用协程)
答案 0 :(得分:0)
所以,这就是我提出来解决问题的方法。
协同程序是实现此效果的最简单方法;如果你有不同的方式,我很乐意看你的解决方案。
在start函数中,创建字符串列表或简单的字符串数组(我使用数组,因为我不修改数组;使用不可变数据类型保存空间)。这将是您在屏幕上打印的内容,就像您要输入它一样。
如果你想模拟一个终端;您还可以添加对您键入的命令的回复;这有点复杂,但不是那么多。
void Start()
{
string typed_commands[] = new string[]{
"ls\n",
"cat\n",
"cp\n"
};
StartCoroutine("FakeTerminal");
}
IEnumerator FakeTerminal()
{
float delaytime = 0.3f;
string prompt - ">: ";
foreach (string text_command in typed_commands)
{
output_text += prompt;
foreach (char character in text_command)
{
if (character == '\n')
{
output_text += "Whatever you want to print as reply";
yield return new WaitForSeconds(2f);
}
delaytime = UnityEngine.Random.Range(0.1f, 0.3f);
output_text += character;
textfield.text = output_text;
yield return new WaitForSeconds(delaytime);
}
}
}
正如你所看到的,随机给你一个介于0.1和0.3之间的差异,这会在打字速度上产生一个变化,使得它在键入时更加可信。
我确实使用'\ n'来知道新句子何时开始;这可以模拟终端的响应,如果你需要的话;否则它会在输入下一个命令之前等待一下。 这是我发现实际上在屏幕上输入一系列命令的最简单方法,就好像它是一个终端。远非完美,但总比没有好。