在文本游戏对象中模拟控制台提示的简便方法

时间:2016-03-21 04:26:54

标签: c# unity3d

我正在尝试获得一个模拟控制台的效果,因此玩家可以与之互动以获得乐趣。

我确实放置了一个用作背景的图像,并在顶部放置了一个文本游戏对象,它覆盖了大量的图像。我可以输入文本并更新文本,但如果键入了文本,它就不会真正看起来(光标不会闪烁,只要我更改.text值就会立即显示文本)。

有一种简单的方法来模拟键入和光标闪烁吗?我正在使用C#来实现这一目标。

我正在尝试添加一个循环,其中每500毫秒,我键入一个字符并刷新字符串,因此在更新函数中,如果文本是逐字符写的,它应该看起来像。

问题在于,根据我的记忆,更新功能按照自己的进度;所以这意味着它将以相同的速度打印每一行;如果输入文字,它就不会显示出来。

有关如何影响更新功能的任何建议? (旁边使用协程)

1 个答案:

答案 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'来知道新句子何时开始;这可以模拟终端的响应,如果你需要的话;否则它会在输入下一个命令之前等待一下。 这是我发现实际上在屏幕上输入一系列命令的最简单方法,就好像它是一个终端。远非完美,但总比没有好。