How to profile and optimize a game | Unite Now 2020を参考にプロファイラーを使ってパフォーマンスをチェックしてみました。
まず、パフォーマンスに影響を与えるのは、FPSとバッチ数、ポリゴン数だそうです。これらはゲームビューのStatsボタンで表示できます。
FPSは1秒間のフレーム数で、ポリゴン数はメッシュの三角形の数です。バッチ数とはドローコールといわれる描画命令の数で、これを減らすには、似たメッシュをひとまとめにしたり、大きなメッシュと結合したりします。これをバッチ処理と言います。
プロファイラー
Window > Analysis > Profilerをクリックして、プロファイラーウィンドウを表示できます。
プレイボタンを押すとプロファイラーが更新されていきます。
Profiler Modulesのドロップダウンメニューから必要なものだけを表示して、情報量を減らせます。ここではCPUとRenderingだけを表示しています。
グラフをクリックしてシークバーを置くと、ゲームが停止状態になります。プロファイラーでは、下のエリアにそのフレームの情報が表示されます。
左のドロップダウンメニューからヒエラルキービューに切り替えてみます。
すると、各処理を所要時間でソートできるので、何に時間がかかっているのかを調べられます。
SimpleAIクラスのUpdateメソッドに15ミリ秒かかっているのがわかります。動画ではこの情報をもとにスクリプトを修正しています。
バッチ数を減らす
静的バッチ処理を行うためには、動かないオブジェクトのインスペクタでStaticにチェックを入れます。
その後、ライトマップもベイクするそうです。
オクルージョンカリング
また、カメラに映っていないもののレンダリングを無効にするオクルージョンカリングもパフォーマンスを上げます。
そのために、オクルージョンを適用する全てのオブジェクトで、Occluder StaticとOccludee Staticのチェックを入れます。
そして、Window > Rendering > Occlusion CullingでOcculusion Culling ウィンドウを開き、ベイクボタンを押します。
すると、シーンビューで効果を確認できました。これによって描画に必要なバッチ数やポリゴン数がかなり減少します。