Hero background image
プロファイルアナライザーでゲームを最適化する方法
このページでは、Unity およびネイティブ プラットフォームのプロファイリング ツールに Profile Analyzer を追加する方法について詳しく説明します。始める前に、この入門ガイドを確認してください。

プロファイル アナライザーは、電子書籍『Unity ゲームのプロファイリングに関する究極のガイド』で説明されている多くの機能の 1 つです。この 70 ページを超えるガイドには、Unity でアプリケーションをプロファイリングし、メモリを管理し、最初から最後まで電力消費を最適化する方法について、社外および社内の Unity エキスパートからの高度な知識とアドバイスがまとめられています。

プロファイル アナライザーのウォークスルー

プロファイル アナライザーのウォークスルー

パフォーマンスを向上させる場所を知りたいですか?変更前、変更後のパフォーマンス比較をしたくないですか?Unity のバージョンアップデートがゲームにもたらす影響を把握していますか?プロファイル アナライザーは、このような質問に答えるのに役立ちます。

標準の Unity Profiler では単一フレームの分析が可能ですが、Profile Analyzer では一連の Unity Profiler フレームからキャプチャされたプロファイリング マーカー データを集約して視覚化できます。

Profile Analyzer の概要

プロファイル アナライザーは、どこに重点を置くべきかを特定するのに役立ちます。2 つの Unity パフォーマンス プロファイリング キャプチャを並べて比較し、変更の影響を検査する方法を提供します。

プロファイル アナライザーは、Unity プロファイラーですでに利用可能な単一フレーム分析を補完します。これは、さまざまな Unity Profiler フレームからフレームとマーカーのデータを集約して視覚化し、多数のフレームにわたる高レベルの時間経過に伴うパフォーマンス パターンを確認するのに役立ちます。

プロファイル アナライザーは、現在のプロファイラー セッション フレームまたは以前に保存されたキャプチャからの複数のフレームに対して CPU パフォーマンス分析を実行します。このツールには、キャプチャに保存された情報をすばやく解析するのに役立つ統計情報と視覚化機能が付属しています。包括的なフィルタリング 機能を使用すると、興味のあるセクションにドリルダウンすることもできます。これを使用して 2 つのデータ セットを比較したり、生データをエクスポートして他のツールで分析したりできます。

Profile Analyzer は 、ウィンドウ > パッケージ マネージャーからインストールできます。

プロファイルアナライザー
<b>今すぐ始めよう</b>

以下のプロファイリングのヒントは、Profile Analyzer の使用を開始する際に役立ちます。

代表的で繰り返し可能なキャプチャを取得します。

他のすべてのアプリケーションを閉じます。C# スクリプトでProfiler.logFileを使用すると、実行中のゲームから直接プロファイル データを書き出すことができます。つまり、エディターを開く必要はありません。後で Unity Profiler に読み込むことができる.rawファイルを書き出します。

Intel SpeedStep や AMD Precision Boost などの CPU ハードウェア パフォーマンス スケーリングまたはブースト機能を無効にして、クロック周波数が変更されないようにします。

プロファイル アナライザーは、プロジェクトの開発ライフサイクル中に発生する可能性のある最適化とパフォーマンスに関する質問に答えるのに役立ちます。たとえば、300 フレームのゲームプレイ キャプチャまたは 20 秒の読み込みシーケンスの場合:

メインスレッドとレンダリングスレッドで最も CPU コストがかかるのはどれですか?

これらの各マーカーの平均/中央値/合計コストはいくらですか?

プロファイル アナライザーを使用すると、複数のフレームにわたって実行されるコードのパフォーマンス特性や、分析前後の異なるセッション キャプチャを詳しく調べることができます。

Profile Analyzer を使用してデータを比較する際のその他のヒント:

深度レベル 4 を選択して、ユーザー スクリプトを詳細に調べます (Unity エンジン API レベルは無視します) (深度レベルは、階層内のマーカーの位置に関する情報を表示します)。このレベルまでフィルタリングし、タイムライン モードでプロファイラーを確認すると、呼び出しスタックの深さを相関させてここで選択を行うことができます。Monobehaviour スクリプトは青で表示され、4 レベル下にあります。これは、特定のロジックとゲームプレイ スクリプトが、他の「ノイズ」なしでそれ自体で負荷をかけているかどうかをすばやく確認する方法です。

深度スタック レベル 3 を使用して、Unity エンジンの他の領域 (アニメーターやエンジン物理など) についても同様にデータをフィルター処理します。

フレーム サマリー セクションの右側には、強調表示されたメソッドのパフォーマンス範囲ヒストグラムが表示されます。最大フレーム番号 (最大タイミングが見つかった正確なフレーム) にマウスを合わせると、クリック可能なリンクが表示され、Unity Profiler でフレーム選択を表示できます。このビューを使用して、最大フレーム時間の増加に寄与する可能性のあるその他の要因を分析します。

データ収集
特定の関数のパフォーマンスを確認する

関数の呼び出しがパフォーマンスにどのような影響を与えるかを確認するには、Unity Profiler または Profiler.logFile メソッドを使用してデータをキャプチャします。Unity Profiler を使用している場合は、「Pull Data」ボタンをクリックして、Profile Analyzer に読み込むことができます。それ以外の場合は、以前に保存したデータ キャプチャをファイルから読み込むことができます。

これを実行するとすぐに分析が開始され、フレーム時間グラフにデータが表示されます。グラフ内の白とシアンのバーに注目してください。白いバーはフレームの継続時間を表し、水色のバーは現在選択されているマーカーを表します。これにより、選択したマーカーの合計フレーム時間への寄与を比較できます。

フィルターを使用してマーカーを検索できます。マーカーの詳細が選択したサブセットを反映するよう自動的に更新され、「Count」列には出現回数が表示されます。フレーム時間グラフではマーカーがハイライトされます。マーカーを選択すると、マーカー サマリーの詳細パネルも更新され、その特定のマーカーの分析統計が表示されます。

代表的なフレーム
代表的なフレームを見つける

パフォーマンスを分析するときは、確認するデータが代表的なものであることを確認する必要があります。データのノイズが多い場合、右上にある「Frame Summary」を使用することで、平均的なフレームを選択していることを簡単に確認できます。「Median」として表示されている「Frame」をクリックすると、プロファイラーに関連する分析が表示されます。または、フレーム時間グラフを使用して右クリックし、「中央フレームの選択」を選択します。

分析をフレームの選択に限定することもできます。表示されるすべての統計は、特定の選択を反映して更新されます。

単一の フレームからの単一のデータ ポイントに依存するのではなく、代表的なフレームのグループを選択して複数のデータ ポイントを分析できます。フレーム時間グラフを右クリックして「フレーム期間で並べ替え」を選択すると、データ内のノイズの一部を平滑化する代表的なサンプルとして、中央フレームの周囲のフレーム セットを選択できます。

プロファイルアナライザープロジェクト設定
プロジェクト設定を変更することの効果

プロファイル アナライザーは、グラフィックス ジョブの有効化など、プロジェクト全体の設定を適用する場合のパフォーマンスの違いを判断するのに役立ちます。この機能を使用するには、ベースラインのキャプチャーを取り、変更を加えた後に別のキャプチャーを取ります。ゲームを実行し、Unity Profiler でサンプリングし、そのキャプチャを Profile Analyzer に取り込み、2 番目のキャプチャを取り込みます。

フレーム サマリー セクションで、2 つのキャプチャの結果を並べて表示できます。

GPU依存
GPU バウンド適否

パフォーマンスにボトルネックがないことを確認するには、メイン スレッドの Gfx.WaitForPresentOnGfxThread マーカーを確認します。フィルター領域に「Gfx.WaitForPresentOnGfxThread」と入力して検索します。そのマーカーの中央値がゼロ以外の場合、CPU は GPU のアクティビティが完了するまで待機してから続行できます。

フレーム時間グラフでそのマーカーを見ると、それがフレーム時間にどの程度貢献しているかがわかります。CPU が GPU を待機している場合は、GPU に依存している可能性が高くなります。このシナリオを確認するには、レンダリング スレッド プロファイルで Gfx.PresentFrame または <GraphicsAPIName>.WaitForLastPresent マーカーが存在するかどうかを確認します。さらに詳しい情報については 、Unity ゲームのプロファイリングに関する究極のガイドの 電子書籍をご覧ください。また、GPU プロファイリング ツール を調べて、最適化できる場所を確認してください。

プロファイルアナライザー
データセット管理

プロファイル アナライザー ウィンドウの上部のセクションからデータを管理できます。ここから、Unity Profiler を開いて、Unity Profiler から「データを取得」したり、以前に保存したファイル (任意の Unity バージョン) をロードしたりできます。

データを読み込むと、フレーム時間グラフに表示されます。これは、サンプルの範囲を選択できるインタラクティブな領域です。マーカーの詳細テーブル内のすべての概要情報は、選択内容を反映して自動的に更新されます。フレーム時間グラフを右クリックすると、高度な選択オプションにアクセスできます。

[保存] ボタンをクリックして、分析データを .pdata ファイルとして保存します。ファイル形式には、プロファイル アナライザー保存ファイル (.pdata) とプロファイラー保存ファイル (.data または .raw) の 2 種類があることに注意してください。両方のファイルを同じディレクトリに保存することをお勧めします。

フレームのサマリー
フレームのサマリー

フレーム サマリー (プロファイル アナライザー ウィンドウの右側) には、最小値、最大値、中央値などのフレーム時間のハイライトが表示され、プロファイラー内の特定のフレームにジャンプできるボタンも表示されます。この領域には、フレーム時間分布ヒストグラムと箱ひげ図も表示されます。

マーカーテーブル
マーカーテーブル

マーカーの詳細

このセクションでは、すべてのスタック深度を含む、プロファイラーからのマーカー データのマーカー テーブルが表示されます。すべてのマーカーの Unity Profiler データが集計され、中央値やその他のフレーム時間が提供され、この表にも表示されます。これらの詳細を特定のスタック深度の「スライス」にフィルタリングすることも可能です。

マーカーの概要

右側のマーカー概要領域には、選択したマーカーとそれらがフレーム時間に与える影響に関する集計情報が表示されます。この情報は、ヒストグラムや箱ひげ図でも視覚的に表示されます。

概要の下部には、集計されたデータ セット内の個々のマーカー インスタンスの最小時間と最大時間が表示されます。

フィルター
フィルター

名前で

サブ文字列またはサブ文字列のコレクションを入力して、特定の名前のマーカーにレビューを集中させることができます。名前にスペースが含まれている場合は、必ず部分文字列を引用符で囲んでください。

興味のないマーカーを除外することができます。たとえば、ジョブのアイドル時間に基づいてマーカーを除外したり、プロファイラー自体の一部であるマーカーを除外したりできます。

テーブル内の関心のあるマーカーを右クリックしてフィルター選択に追加することで、マーカー フィルターを設定することもできます。

フィルターを削除

また、テーブルとグラフの両方で、1 つのマーカーとこれらのマーカーの下にあるすべての子サンプルをデータから非表示にすることもできます。これは主に、iOS および Android デバイスで VSync/待機時間を削除するためのオプションです。2つの一般的なマーカーはすでに事前設定されており、ドロップダウンから選択できます。 取り除く:なし。これらのマーカーは、FPS 待機 および Present 待機と呼ばれます。より高度な使用例では、右クリックのコンテキスト メニューから [マーカーの削除] オプションを選択してマーカーを削除できます。

一度に削除できるマーカーは 1 つだけです。ドロップダウンで [なし] を選択すると、マーカーを再度追加できます。

スレッド

特定のワーカー スレッドのデータを表示することを選択できます。すべてを集約して表示するには、スレッド選択ポップアップ ウィンドウの上部にある [すべて] をオンにします。

深さ

ほとんどの Unity サブシステムにはそのレベルの高レベルマーカーがあるため、深度 3 を確認することをお勧めします。こうすることで、レンダリング、アニメーション、物理演算などの主なサブシステムの貢献度を確認できます(深度 3 は Unity の最新リリースに該当する深度です。古いリリースの場合は、別の深度に切り替える必要がある場合があります。

親でフィルタリングするには、マーカー テーブル内のマーカーを右クリックし、[親マーカー フィルターとして設定] を選択します。

分析タイプ

デフォルトでは、プロファイル アナライザーにはマーカーの合計時間が表示されますが、セルフ時間に変更できます。自分の時間は、自分の時間が実際に費やされている場所を詳細に調べたい場合に便利です。

単位

デフォルトの単位はミリ秒ですが、より短い時間の場合はマイクロ秒に切り替えることができます。

中央フレームの上位 10 個のマーカー
中央フレームの上位 10 個のマーカー

ウィンドウのこの部分には、選択したフィルターの上位 10 個のマーカーが表示されます。このツールを使用する最適な方法は、Unity サブシステムを確認できるように、深度 3 の子を含めて、分析タイプにメイン スレッドと合計時間を選択することです。これにより、レンダリング、物理演算、アニメーション時間など、これらの主なシステムのそれぞれの貢献度の比率が表示されます。

比較ビューで、 比率 ドロップダウンを使用して、プロファイル アナライザーがマーカーを互いに描画する方法を調整します。

正規化では、選択した深度での 2 つのデータ セットをそれぞれの時間に対して相対的に表示します。

最長は、選択した深さにおける 2 つのセット間の絶対差を表示します。

さらに詳細なレポートと分析を行うには、データ バーにマウス カーソルを合わせると、正確なパーセンテージとメトリックが表示されます。

データセットの比較
データセットの比較

プロファイル アナライザー ウィンドウの上部で、[比較] タブに切り替えて、分析する 2 つのデータ セットを選択できます。一方のデータセットは青で表示され、もう一方はオレンジで表示されます。または、たとえば中央値のフレームと外れ値のフレームを比較するなど、単一のデータ セットの 2 つのサブ領域を比較することもできます。

マーカー比較表では、データが青とオレンジで視覚的に表されるため、特定の領域でどちらのデータ セットの実行速度が遅いかをすぐに確認できます。

いずれかのスキャンにマーカーがない場合、その列にダッシュが表示されます。これは、たとえば異なる Unity バージョンを使用している場合など、マーカーの名前が変更された場合に発生する可能性があります。

データのエクスポート

プロファイル アナライザーからデータをエクスポートして、CSV ファイル形式でさらにカスタム処理を実行できることに留意してください。マーカー テーブル、フレーム時間グラフ、比較テーブル、またはフレーム時間グラフの比較の内容をエクスポートできます。

プロファイル アナライザー、プロファイラー、またはプロジェクトでそれらの特定の機能を使用する方法について質問がある場合は、 フォーラムのディスカッションに参加してください。

その他のリソース

幅広いプラットフォームやデバイスにわたってゲームのパフォーマンスをプロファイリングして磨き上げることで、成功に向けた計画をより適切に立て、プレイヤーベースを大幅に拡大することができます。

この記事の冒頭で述べたように、電子書籍『Unity ゲームのプロファイリングに関する究極のガイド』 には、Unity プロジェクトのプロファイリングに関するさらに多くの手順が記載されています。

このセッションは Unite Copenhagen からも視聴できます。これは 2019 年のものですが、プロファイル アナライザーに関する優れたヒントが今でも提供されています。

最後に、Unity の高度なガイドと記事はすべて ベストプラクティスハブで見つかります。

このコンテンツにご満足いただけましたか?