Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Profiling編 Unity eBook "Optimaize Your Mobile Game Performance" を読み解く

Optimize_Your_Mobile_Game_Performance

 Unity公式から無料のeBookがいくつか発行されており、今回取り上げる"Optimize Your Mobile Game Performance"もその中の一冊。Unityの最新版のLTSが出た段階で出されるらしいので、現在は2020LTSに則った内容です。

 e-Bookについては上のリンク先よりダウンロードできますが、Eメール・アドレス等の情報を入力する必要があります。当然、英語版のみです。

 

 この英文を日本語に翻訳してみる、というのが本企画。長くなってしまうので、各章ごとに記事を分けて書いていきます。まずはProfiling(プロファイリング)編からです。

 

プロファイリング

Build SettingDevelopment Build, Auto Connect Profilerにチェックして、ビルドしてプロファイリングする。(より細かく調べたい時はDeep Profilingにもチェックをいれる、ただし、負荷が大きい)

 

Preferences>Analysis>Profiler>Frame Countでの設定で最大2000フレームまで計測時間延ばせる。

 

ProfilerMarkerDeep Profilingモードを使うと、全ての関数呼び出しの最初と最後を計測できるようになり、どこがボトルネックになっているか正確に分かるようになる。

 

・最適化する前に、Profiler .data fileを記録しておく。後で比較するのに使える。

 

・早めに、そしてこまめにプロファイリングする。開発の早い段階から計測をしていこう。

 

・闇雲に最適化しない。原因を空想せずに、きちんと計測したデータを元に最適化する。

 

・可能なら常に目標となるデバイス上で開発ビルドを計測する。エディターで計測して得られるのは大まかな情報に過ぎない。

 

・プラットフォーム毎、iPhoneやAndoroid向けも含めた様々な計測ソフトあるので、それを使うのもまた良し。(X code, Android Studio, Arm Mobile Studioなど)

 

・さらに深い分析をする時にはパッケージ・マネージャーからProfile Analyzerをインストールする。過去の計測データと現在のを比較して、最適化がどのくらい効果を出してるか確認できる。

 

・フレームごとに使える時間予算は決まっている。そのゲームが60FPSなら16.666...msで30FPSなら33.333...msとなる。ただし・・・

モバイルの場合、60FPSで11ms、30FPSで22msしか使えない!

と考える必要がある。

 これはモバイルは過剰な発熱を抑えるために65%程度くらいのマシンパワーしか使えない、ということ。

 

CPU-boundか?GPU-boundか?Gfx.WaitForCommandsマーカーが表示されている時はCPUが遅れていてGPUが待機している。Gfx.WaitForPresentマーカーは、GPUがフレームを表示するのをCPUが待っている状態。どっちに負荷が掛かって、処理が遅れているかを特定する。

 

・モバイルコンピュータには多くの場合、冷却機構がないので特に発熱には気をつける。プログラムに問題はなくても、熱くなりすぎると計測上のパフォーマンスが落ちることがある。

 

・サポートする最低スペック機で測定する。

 


 というわけで、Profilingについてのまとめメモでした。Profilingに辿り着く前にまず、ゲームを動かすために覚えることがまだまだあるのですが、ここらへんも勉強し始めないとダメですね。次回はメモリ編です。