[Unity] シーン切り替え時間を測定してみる
Unityでのシーン切り替えは重いという言葉をよく耳にします。
しかし、どこまで重いのかについては根拠となる情報が存在せず・・・
今回はひとつのGameObjectのみが存在したシーンを再読み込みすることで切り替えにかかる時間を計測してみました。
以下計測用スクリプトです。
using UnityEngine; using System.Collections; public class TimeLogger : MonoBehaviour { public static float StartTime { get; set; } public static float EndTime { get; set; } public static void printTime() { // 開始・終了の時間差表示 var diffTime = EndTime - StartTime; Debug.Log("diffTime = " + diffTime * 1000 + "[ms]"); Debug.Log("Time.deltaTime = " + Time.deltaTime * 1000 + "[ms]"); } }
using UnityEngine; using System.Collections; public class ChangeScene : MonoBehaviour { static bool isFirst = true; void Awake() { if ( isFirst ) { isFirst = false; return; } // シーン切り替え後時刻保存 TimeLogger.EndTime = Time.time; // シーン切り替えにかかった時間表示 TimeLogger.printTime(); } // Update is called once per frame void Update () { if ( Input.GetKeyDown(KeyCode.A) ) { // シーン切り替え前時刻保存 TimeLogger.StartTime = Time.time; // シーン切り替え Application.LoadLevel("Scene"); } } }
シーンには以下のようにひとつのMainCameraオブジェクトだけが存在している状態です。
以下実行結果です。
このことから、シーン切り替えにかかる時間はTime.deltaTimeすなわちフレーム間の時間にほぼ等しいことがわかります。
今回はUpdateとAwakeメソッドの中で開始・終了を計測しているために1フレーム分の時間がかかっていると思われます。(あくまで推測です)
しかし、どのみち次にレンダリングされるタイミングは次回のUpdateが呼び出されるタイミングであることを考えると、1フレーム分という時間は許容範囲のように思えます。
フレーム間隔を除いたシーン切り替え時間は0.001msにも達していない結果となりました。
大量のGameObjectが存在している場合はもっと時間がかかるかもしれませんが、シーン切り替えとは別物と考えられるでしょう。
果たしてシーン切り替えとプレハブによる切り替えのどちらが速いのか・・・
これについてはまた後日比較検証を行いたいと思います。