こんにちは、Unityエンジニアのオオバです。

Task.Delayの待機時間が本当に数値通りかを以下のサンプルコードで確認しました。

async void Start()  
{
    var t = Time.time;  
    var st = Time.realtimeSinceStartup;  

    await Task.Delay(5000);  

    // ゲーム時間  
    Debug.Log($"Time.time :{Time.time - t}");  

    // リアルタイムの時間  
    Debug.Log($"RealtimeSinceStartup : {Time.realtimeSinceStartup - st}");  
}

期待する結果は、5秒きっかり経過することです。

結果

Task.Delayの待機時間をUnityエディタ上で計測をしたら少しずれる件_0

このようにTime.timeは0.5秒早く、Time.realtimeSinceStartupは約5秒経過をマークしました。
事実ベースではTask.Delayで5秒待機するとゲーム時間は0.5秒ほど早く完了するようです。
※理由が知りたい

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

待機時間を長くしてみる

Task.Delay(10000);として10秒待機してみます。このときズレは大きくなるのか、一定なのか。

大きくズレていく

Task.Delayの待機時間をUnityエディタ上で計測をしたら少しずれる件_1

約1.5秒ズレました。
この結果から待機時間が長ければ長いほど指定した時間より早い時間で待機時間は終了してしまうことがわかりました。

念のためにコルーチンで確認

IEnumerator Start()  
{
    var t = Time.time;  
    var st = Time.realtimeSinceStartup;  
    yield return new WaitForSeconds(5f);  
    Debug.Log($"Time.time :{Time.time - t}");  
    Debug.Log($"RealtimeSinceStartup : {Time.realtimeSinceStartup - st}");  
}

Task.Delayの待機時間をUnityエディタ上で計測をしたら少しずれる件_2

コルーチンは、ほぼほぼ時間通り待機してくれました。

最後に

Task.Delayを使用する際は、低負荷でも少しずれる、
待機時間が長ければ長いほどズレは大きくなるということを
頭に入れておくと良いのかなと思いました。

オススメ記事
検証環境