Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# while循环是否只产生暂停函数的最佳实践?_C#_Unity3d - Fatal编程技术网

C# while循环是否只产生暂停函数的最佳实践?

C# while循环是否只产生暂停函数的最佳实践?,c#,unity3d,C#,Unity3d,我有一个函数调用第一个对话框,然后需要等待用户按下空格键,然后显示第二个对话框。通过在while循环中让步,我可以通过协同程序轻松实现这一点,如下所示: message.PlayMessage(); while (Input.GetKeyDown (KeyCode.Space) == false) { yield return null; } message.PlayMessage(2); 我的问题是:这是一个奇怪的解决方案吗?我觉得这可能有一个实际的函数,

我有一个函数调用第一个对话框,然后需要等待用户按下空格键,然后显示第二个对话框。通过在while循环中让步,我可以通过协同程序轻松实现这一点,如下所示:

message.PlayMessage();

    while (Input.GetKeyDown (KeyCode.Space) == false) {
        yield return null;
    }

message.PlayMessage(2);

我的问题是:这是一个奇怪的解决方案吗?我觉得这可能有一个实际的函数,我担心这可能会无缘无故地占用大量的系统资源。

它会在一个帧中调用一次,不会很昂贵。 使等待功能更加方便

    IEnumerator MyMethod() {
        message.PlayMessage();
        yield return StartCoroutine(WaitForKeyDown(KeyCode.Space));
        message.PlayMessage(2);
    }

    IEnumerator WaitForKeyDown(KeyCode keyCode)
    {
        while (!Input.GetKeyDown(keyCode))
            yield return null;
    }
然后打电话

StartCoroutine(MyMethod());

每帧调用一次,不贵。 使等待功能更加方便

    IEnumerator MyMethod() {
        message.PlayMessage();
        yield return StartCoroutine(WaitForKeyDown(KeyCode.Space));
        message.PlayMessage(2);
    }

    IEnumerator WaitForKeyDown(KeyCode keyCode)
    {
        while (!Input.GetKeyDown(keyCode))
            yield return null;
    }
然后打电话

StartCoroutine(MyMethod());

我认为这相当于Unity的wait,它不应该使用太多的资源,我认为这很好。因为协程不会启动任何新线程。只需检查每个帧的
Input
。我认为这相当于Unity的
wait
,不应该使用太多资源。我认为这很好。因为协程不会启动任何新线程。只需检查每一帧的
Input