如何获得剩余的剩余时间在协同程序上?

时间:2020-04-09 20:35:04

标签: c# unity3d

您好,我想知道如何在运行的协同程序中获得剩余时间。我要从其余的其他协程中运行另一个协程。像这样排序:

void test (){
    StartCoroutine(TestOne());
    if(Input.GetKey(KeyCode.A)){        // some way to get remaining time, or 
        StartCoroutine(TestTwo(time));  // something like this: 
                                        // float time = TestOne.GetRemainingTime();      
    }   
}

2 个答案:

答案 0 :(得分:2)

这很大程度上取决于您要执行的操作,但是Unity中没有.GetRemainingTime()方法。

一般的解决方案是在您的couroutine中添加一个计数器,例如...

float remainingTimeA = 0f;

IEnumerator MyRoutineA()
{
    float duration = 2.0f //Two seconds

    remainingTimeA = duration; //Set the remaining time as the duration
    while(remainingTimeA > 0f) //While there is still time
    {
        remainingTimeA -= Time.deltaTime; //Reduce the timer with time between previous and actual frame
        yield return null; //Wait for this frame to end
    }
}

您可以做的是拥有一个remainingTimeA变量,您可以检查该变量是否需要。您可以在协程中使用要等待的持续时间对其进行初始化。然后使用一段时间手动创建等待的每一帧。

yield return null等待帧结束,而不是new WaitForSeconds(duration),您只是在等待每帧的同时,将计时器减少Time.deltaTime,这是每帧之间的时间。因此,如果协程开始后经过了1秒,则剩余的TimeA应该为1.0f。

我希望是明确的。

答案 1 :(得分:0)

使/usr/lib/{my_file} Read-only file system test

IEnumerator

如果您不需要代码来等待其他任何内容,则最后一行只能是IEnumerator test (){ yield return StartCoroutine(TestOne()); //wait until TestOne() is over yield return new WaitUntil(() => Input.GetKey(KeyCode.A)); //wait until user press A yield return StartCoroutine(TestTwo(time)); //wait until TestTwo(time) is over }

这样,您无需知道剩余时间,只需等到结束再运行其他所有内容即可。