こんにちは、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秒きっかり経過することです。
結果

このようにTime.time
は0.5秒早く、Time.realtimeSinceStartup
は約5秒経過をマークしました。
事実ベースではTask.Delayで5秒待機するとゲーム時間は0.5秒ほど早く完了するようです。
※理由が知りたい
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
待機時間を長くしてみる
Task.Delay(10000);
として10秒待機してみます。このときズレは大きくなるのか、一定なのか。
大きくズレていく

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

この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Unity2019.1.10f1