テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】「一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術 」

先日のCEDEC 2018の資料です。
プロファイルに関する幾つかのアップデートが紹介されています。出来なかった事が出来るようになっている部分もあるので、一度見るオススメです。

 

www.slideshare.net

 

要約(プロファイル関連)

Time.realtimeSinceStartupで正しい時間を取得

タイムスケールに依存する時間ではなくリアルタイムな時間を取得します。
差分で処理時間を計測するならコレがオススメです。

Player Loopでプロファイラーを繋がずとも負荷を計測

PlayerLoopとTime.realtimeSinceStartupを組み合わせてリアルタイムに処理時間を計測しようというアイディアです。
個人的にはこの用途にPlayerloopを使うのは少し危険じゃないかなという気がしていますが、面白いアイディアでもあります。
(導入の順番や上書き等で面白おかしいデータになりそうな)

f:id:tsubaki_t1:20180831014612j:plain

tsubakit1.hateblo.jp

Recorder APIで処理時間を取得

ProfilerのRecorderが実行時にスクリプトから処理時間が取得出来るので、それを使用して負荷を計測する的なアプローチです。
PlayerLoopと異なり、全スレッドの累計時間を取ります。

f:id:tsubaki_t1:20180831015013j:plain

tsubakit1.hateblo.jp

メモリを消費しているアセットの把握

Profiler APIを使用してメモリ使用量を把握するか、Resources APIで利用中のアセットを全取得という感じのアプローチを紹介しています。
FindObjectsOfTypeAllで読み込んでるアセットを全取得は面白いアイディアです
主にプロファイラーに繋げない環境で便利そう。

f:id:tsubaki_t1:20180831015931j:plain

プロファイラーの書き出しについて

プロファイル結果をファイルに書き出すAPIと、300フレーム以上の結果を確認しやすくするエディター拡張の紹介です。
300フレーム制限、本当に何で存在するんでしょう

f:id:tsubaki_t1:20180831020314p:plain

github.com

 

要約(新機能情報)

実機上でのプロファイラー動作が高速化(2017.3+)

Unity 2017.3以降は、送信する情報や集計方法を整理することでかなり高速になります。
ただ以前のバージョンのプロファイリング結果と互換性がなくなるっぽいです。

実機上でのDeep Profiling(2017.3+)

引数に「-deepprofiling」を渡すと実機でもDeep Profilingが可能に(.NET 4系かつMono限定)

androidadb shell am start -n [パッケージ名]/ [アクティビティ名] -e “unity -deepprofiling" で行けるみたいです。

f:id:tsubaki_t1:20180831021327j:plain

ユーザーThread(.NETのスレッド)にプロファイラーが対応(2017.3+)

BeginThreadProfiling / EndThreadProfilingで、.NET側で作成したスレッドをプロファイラーに載せられるように。
Unity 2018.3から自動登録されるので、把握は簡単になりそうです。

tsubakit1.hateblo.jp

ジョブシステムが既にスレッドを目一杯使用しているので、観測できるからとスレッド使いまくるとコンテキストスイッチ等で大変なことになりそう

Native Plugin Callback(Unity 2018.2+)

プロファイラーのタイムライン相当の情報をフックして構築
上手く使うと、Systraceで見れる謎のプロセスの中身が分かるようになります。だから何が出来ると言われると微妙な機能ですが、頑張れば色々できそう

f:id:tsubaki_t1:20180831021711j:plain

tsubakit1.hateblo.jp

IL2CPPでScript Debugging(2018.2)

IL2CPP変換後の結果とC#コードがバインド出来るようになるみたいです。
これでiOSビルド後のバグが追いやすくなります。
.NET 4系のみです。

新しいMemoryProfiler

Memory Profiler Extensionがエディターに統合されます。

github.com

f:id:tsubaki_t1:20180831022243j:plain

感想

プロファイリング関連は常に最新を追っていきたいですね。
色んな最適化Tipsはありますが、結局ゲームに一致してるのかはプロファイルしてみないと分からないので、そこのところを出来るだけ楽したい心です。

f:id:tsubaki_t1:20180831024112j:plain

f:id:tsubaki_t1:20180831024119j:plain

Unite Berlin 2018 - Unity's Evolving Best Practices - YouTube