在协程中获取时间

时间:2018-07-30 08:54:45

标签: c# unity3d time scripting coroutine

我正在Unity3d中开发一个简单的游戏。

我创建了一个Coroutine,它在特定时间后与WaitForSecond一起起作用。

但是在某些状态下,它以StopCoroutine()结尾。

我想知道Coroutine停止时是否可以获取时间。

我的意思是当Coroutine停止时,给我一个23或54秒之类的数字。

2 个答案:

答案 0 :(得分:3)

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
yield return new WaitForSeconds(10);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;

// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Debug.Log("RunTime " + elapsedTime);

如果您只想让时间流逝,请尝试以下操作:

Coroutine testCoroutine = StartCoroutine(yourCoroutine());

然后,当您使用StopCoroutine(testCoroutine);停止协程时,可以从上面记录的秒表功能返回。或者,您始终可以将Time.deltaTime添加到变量并将其作为浮点数返回。那会给你几秒钟和几毫秒。

编辑作者发布代码后。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class sdfsd : MonoBehaviour {
    // Use this for initialization
    void Start () {
        StartCoroutine(WaitUntilAPressed());
    }
    IEnumerator WaitUntilAPressed()
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        yield return new WaitUntil(()=> Input.GetKeyDown(KeyCode.A));

        stopWatch.Stop();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);
        Debug.Log(elapsedTime);
    }
}

答案 1 :(得分:0)

GlobalScope.launch(Dispatchers.IO) {
    val millis = measureTimeMillis {

        // Do Stuff

    }     
    val seconds = TimeUnit.MILLISECONDS.toSeconds(millis)
    Log.d(TAG, "Time: $seconds seconds")
}