この記事でのバージョン
Unity 5.4.0f3
はじめに
今回はUnity上で時間を簡単に計る方法のご紹介!
ちなみに、iOSやAndroid、Unityエディタ上はもちろん、エディタが再生してない時でも使えます!
ようは、エディタ拡張で作った機能の処理時間も計れるということです。
Stopwatch
今回計測に使うのはStopwatchというUnityではなく.NET Frameworkのクラスです。
使い方はとても簡単。インスタンスを作成し、StartとStopメソッドを実行するだけ。
//Stopwatchのインスタンス作成 System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); //計測開始 stopwatch.Start (); /*計測したい処理*/ //計測終了 stopwatch.Stop (); //処理時間を秒で取得 float elapsed = (float)stopwatch.Elapsed.TotalSeconds;
なおusing System.Diagnostics;としてしまうとDebugクラスが被ってしまうため、
Unityで使うときは上記のようにするのがおすすめです。
ProcessTimer
そのままでも使いやすいStopwatchクラスですが、
もっと楽に使えるProcessTimerというものを作ったのでこちらもご紹介!
使い方はStopwatchとほぼ同じですが、
staticクラスなのでインスタンスを作る必要がありません。
//計測開始 ProcessTimer.Start (); /*計測したい処理*/ //計測終了&処理時間を秒で取得 float elapsed = ProcessTimer.Stop ();
また、メソッドの処理時間を測るメソッドも作成しました!
複数回実行した場合の合計時間や、平均時間を計ることも可能です。
elapsed = ProcessTimer.MeasureAction (HeavyMethod); //一回だけ実行した時の処理時間 elapsed = ProcessTimer.MeasureAction (HeavyMethod, 100); //100回実行した時の合計処理時間 elapsed = ProcessTimer.MeasureAction (HeavyMethod, 100, true);//100回実行した時の平均処理時間
//処理時間を計測したメソッド private void HeavyMethod(){ /*計測したい処理*/ }
さらに、他のメソッドや変数は以下のとおり。
ProcessTimer.Reset (); //計測した時間をリセット ProcessTimer.Restart ();//計測した時間をリセットしてから計測を開始する bool isRunning = ProcessTimer.IsRunning;//計測しているかどうかのフラグ //現在の処理時間の合計を各単位にfloatで変換したもの(上からミリ秒、秒、分、時間、日) float totalMilliseconds = ProcessTimer.TotalMilliseconds; float totalSeconds = ProcessTimer.TotalSeconds; float totalMinutes = ProcessTimer.TotalMinutes; float totalHours = ProcessTimer.TotalHours; float totalDays = ProcessTimer.TotalDays; //現在の処理時間の各単位だけをintで抜き出したもの(上からミリ秒、秒、分、時間、日) int Milliseconds = ProcessTimer.Milliseconds; int seconds = ProcessTimer.Seconds; int minutes = ProcessTimer.Minutes; int hours = ProcessTimer.Hours; int days = ProcessTimer.Days;