LoginSignup
6
2

More than 3 years have passed since last update.

FrameDebuggerの情報を外に書き出してみる試み

Last updated at Posted at 2019-12-22

FrameDebuggerの情報を外に書き出してみる試み

FrameDebuggerの中身を書き出す君(作業中)の記事です。

ソースはコチラ
https://github.com/wotakuro/FrameDebuggerSave

何してるの?

frameDebuggerToLog.gif

上記GIFの様にFrameDebuggerの情報を1ステップずつ舐めていって、ログに書き出すツールを作成してみている記事になります。
動作は今の所2018.4でのEditor起動でしか確認しておりません…。

何でこんなことしてるの?

UnityのFrameDebugger最大の不満点は描画を1ステップずつずらしていかないと、描画に関する詳細の情報を取得できない事です。
ShaderやShaderKeyword、描画しているPass名等々が一覧で確認できません。
これは凄い不満だったので、今回作成しました。

特にShaderKeyword抜き出しは、ShaderVariantを抑えるためにも、この取得をさっくり出来るのは非常に重要なのですが、、、
現状では、相当設計して作成していない限り、一覧で持ってくるのは非常に困難です。

ハマった事

FrameDebuggerは、どのステップにいるかを指定してあげないと、その時の詳細情報が取れない仕様になっています。

最初は FrameDebuggerUtility という便利なクラスを見つけて、こちら経由で操作していました。
※InternalクラスなのでReflectionの嵐です。

失敗した実装

1.FrameDebuggerUtility.SetEnable で有効に
2.FrameDebuggerUtility.countでフレーム数取得
3.FrameDebuggerUtility.limitの値を書き換える
4.FrameDebuggerUtility.GetFrameEventDataでそのフレームのデータを取得して書き出して、またFrameDebuggerUtility.limitを書き換えて次のフレームへ行く

と言った形の実装です。
こちらでは Editorアプリ上で再生していないときは上手くいっていたかのように見えました…。
ただEditor上で再生したときに走らせると「FrameDebuggerUtility.SetEnable(true)」で有効にした直後に、FrameDebuggerUtility.SetEnable(false)が呼び出されて即座に失敗しました…。
原因は表示していなくてもFrameDebuggerのWindow自体が処理を持ってしまっていたからでした…

現在の実装

仕方ないので、FrameDebuggerWindowを呼び出して何とかする方向にしました。
※これもまたReflectionの嵐…

1.FrameDebuggerWindow.ShowFrameDebuggerWindow()でウィンドウを呼び出す。
2.FrameDebuggerWindow.EnableIfNeededでFrameDebugger起動
3.FrameDebuggerWindow.ChangeFrameEventLimitでフレームずらす
4.FrameDebuggerUtility.GetFrameEventDataでそのフレームのデータを取得して書き出して、またFrameDebuggerWindow.ChangeFrameEventLimitを書き換えて次のフレームへ行く

という感じで、操作はFrameDebuggerWindowから行い、データはFrameDebuggerUtility から取得するという形です

そんなこんなで、FrameDebuggerの中身を文字列に書き出すことに成功しました!!

追記


こんな感じでCSV書き出しをするようにしました。
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2