您好,我想知道如何在运行的协同程序中获得剩余时间。我要从其余的其他协程中运行另一个协程。像这样排序:
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();
}
}
答案 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
}
。
这样,您无需知道剩余时间,只需等到结束再运行其他所有内容即可。