筆者環境は諸事情によりUnity4.3.xです。
はじめに
Unity製アプリのデバッグやパフォーマンスチェックにProfilerを使用していると思います。
(他のデバイス向けの、そのようなアプリケーションを使うこともあるかと思います)
でも、UnityのProfiler以外だと、プロファイリング結果を出力して共有したりできますよね?
でもUnityのProfilerにはそれらしき項目が見当たらない・・・・。
ので、出力できないかを調べてみました。
(つか、リファレンスとか見たけど詳細は書いてなかった気がする)
よくあるやり方
スクリーンショット(ェ
口頭(ォィ
UnityEngine.Profilerを使う
さっきのは冗談で、ちゃんとあります。
使い方はこんな感じ。
using UnityEngine;
private void Awake()
{
// ログ出力先を指定
Profiler.logFile = "test.log";
// 出力を有効化
Profiler.enabled = true;
}
private void OnDestroy()
{
// 無効化
Profiler.logFile = "";
Profiler.enabled = false;
}
private void OnApplicationQuit()
{
// 無効化
Profiler.logFile = "";
Profiler.enabled = false;
}
こうすると、指定したファイル(自動生成)にプロファイリング結果を出力してくれます。
(PC上だと、プロジェクトルートフォルダ直下に出力されているはずです)
結果は以下の通り。
-- Frame 1 Framerate: 50.6 [Very Good Framerate]
-- Frame 2 Framerate: 56.8 [Very Good Framerate]
-- Frame 3 Framerate: 53.2 [Very Good Framerate]
-- Frame 4 Framerate: 71.5 [Very Good Framerate]
-- Frame 5 Framerate: 70.3 [Very Good Framerate]
-- Frame 6 Framerate: 81.8 [Very Good Framerate]
-- Frame 7 Framerate: 71.5 [Very Good Framerate]
-- Frame 8 Framerate: 70.4 [Very Good Framerate]
-- Frame 9 Framerate: 71.5 [Very Good Framerate]
うん、おいらの欲しい結果とこれ違う。
詳細なプロファイリング結果を出力する
あー、大丈夫です、ちゃんとした結果を出力する方法はありまぁす!(古
実はもう一つ大事なプロパティがあります。
Profiler.enableBinaryLogです。
private void Awake()
{
// 詳細ログを有効化
Profiler.enableBinaryLog = true;
// ログ出力先を指定
Profiler.logFile = "test.log";
// 出力を有効化
Profiler.enabled = true;
}
こうすることで、Profilerの画面に出力されるデータをバイナリデータとして出力することができます。
出力先はProfiler.logFileで指定した出力先に拡張子「.data」をつけたものになります。
...読めない(知ってた)
出力結果をProfilerの画面に反映する
さて、この出力された内容を表示するには、以下の様にします。
public void IdeyoDoragon()
{
Profiler.AddFramesFromFile("test.log");
}
やったねたえちゃん!(おいばかやめろ
これで、
「そのプロファイル結果頂戴よ」
「あかん、プロファイル結果消えた」
等ということから多少は解放されるかと。(人的ミスが無いとは言わない)
※なお、実機での動作は各人で確認してね(ぉぃ
注意事項
最初のコードで
Profiler.logFile = "";
Profiler.enabled = false;
としつこくやっていたと思いますが、
一度この項目をtrueにすると、falseにするまでUnityが出力ファイルをロックします。
ので、必要なくなったら必ずfalseを設定しましょう。
びこう
こんなのもある模様。
UnityEditorInternal.ProfilerDriver