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秒ほど早く完了するようです。
※理由が知りたい
待機時間を長くしてみる
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
※本記事の計測はUnityEditor上で行いました