Получите время, проведенное в сопрограмме

Я работаю над простой игрой в Unity3d.

Я создал Coroutine что делает что-то после определенного количества времени с WaitForSecond,

Но в некоторых штатах это заканчивается StopCoroutine(),

Я хочу знать, возможно ли получить время Coroutine когда это прекратилось.

Я имею в виду, когда Coroutine перестань дать мне цифру как 23 секунды или 54 секунды или что-то в этом роде.

1 ответ

Решение
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);
    }
}
GlobalScope.launch(Dispatchers.IO) {
    val millis = measureTimeMillis {

        // Do Stuff

    }     
    val seconds = TimeUnit.MILLISECONDS.toSeconds(millis)
    Log.d(TAG, "Time: $seconds seconds")
}
Другие вопросы по тегам