このガイドでは、Unity プラグインを使用して Unity 2017.4 以降のフレーム時間データを記録し、アップロードする方法について説明します。
C または C++ を使用するゲームエンジンについては、ネイティブ ゲームエンジンのガイドをご覧ください。
背景
ゲーム エクスペリエンスの重要な要素は、レンダリング パフォーマンスです。レンダリング パフォーマンスは、次の 2 つの入力の結果です。
- フレームレート: フレームが描画される頻度。
- グラフィックの品質設定: フレームが表示される際の忠実度のレベル。グラフィックだけでなくシミュレーションの忠実度も含みます。
ゲームの場合、次のような場合にレンダリング パフォーマンスが高いと考えられます。
- 安定し一貫したフレームレート(目標の頻度でレンダリングされるフレームの割合)を提供している。
- 安定性を維持しつつ、可能な限り高い頻度でフレームをレンダリングしている(一般にゲームの種類に応じて 30 FPS または 60 FPS)。
- ユーザーに指定された画面サイズと密度で詳細レベルを最大化し、同時に安定して目標のフレームレートを達成している。
Android Frame Pacing ライブラリを使用すると、フレーム時間のばらつきを抑え、安定したフレームレートを実現できます。残されたフレーム時間のばらつきは、ゲームプレイの特定のシーンでの表示の詳細レベルと、デバイスのグラフィック能力によるものです。Android Performance Tuner を使うと、ゲームプレイ中にフレーム時間が目標より遅くなったり速くなったりした時間を特定し、その問題を以下の要因に関連付けることができます。
- 特定の品質設定
- ゲーム内の特定のシーン
- 特定のデバイスモデルまたはデバイス仕様
データの記録とアップロード
Tuning Fork ライブラリの機能は、Android Frame Pacing ライブラリが(Frame Pacing ライブラリが存在しない旧バージョンの Unity の場合、Unity エンジンが)フレームごとにティック関数を呼び出すことで実現されます。ライブラリ内では、このティック情報がヒストグラムに集約され、HTTP エンドポイントを通じて定期的に Google Play にアップロードされます。各ティックは、インストゥルメント キーとアノテーションに関連付けられて記録されます。アノテーションは Unity プラグインを使用して定義します。
インストゥルメント キー
インストゥルメント キーは、そのティックがフレーム内のどこからのものかを示します。各ティック関数の呼び出しに渡す必要がある整数です。これは Unity プラグインによって自動的に行われます。ゲームの Unity 設定で Optimized Frame Pacing オプション(Unity バージョン 2019.3.14 以降で使用可能)が有効になっている場合、Android Performance Tuner は Android Frame Pacing ライブラリの情報を使用して拡張指標をインポートします。
アノテーション
アノテーションは、記録されたティックでのゲームの動作に関するコンテキスト情報を提供するものです。たとえば、アノテーションにより次のいずれかを識別できます。
- 現在のゲームレベル
- 特定シーンの読み込み中
- 「ビッグボス」の表示中
- その他のゲームの状態に関する情報
アノテーションは、Unity プラグインが提供するダイアログで定義されます。
内部的には、Tuning Fork ライブラリは Google のプロトコル バッファ形式を使用してアノテーションと忠実度パラメータを格納します。これは、拡張可能な構造化データのための明確に定義された複数言語対応のプロトコルです。詳細については、プロトコル バッファのドキュメントをご覧ください。
忠実度パラメータ
忠実度パラメータは、メッシュの詳細レベル、テクスチャの解像度、アンチエイリアス方法など、ゲームのパフォーマンスやグラフィックの再現性に影響を与えます。アノテーションと同様に、忠実度パラメータは Unity プラグインが提供するダイアログで定義されます。
メモリと CPU のオーバーヘッド
Tuning Fork ライブラリで使用されるすべてのメモリは、ゲームプレイ中に影響が発生しないように、初期化時に割り当てられます。データのサイズは、インストゥルメント キーの数、想定されるアノテーションの数、各ヒストグラムのバケット数によって異なります。各バケットのバイト数は、これらの個数の 4 倍になります。また、ダブルバッファ方式で送信できるように、すべてのヒストグラムは同じものが 2 つあります。
送信は別のスレッドで行われるため、これがティックの呼び出しをブロックすることはありません。アップロードに使用できる接続がない場合は、後でアップロードするために送信をキューに追加します。
ティック関数の呼び出しに、処理オーバーヘッドはほとんどありません。ヒストグラム バケットの配列へのインデックスを計算し、整数のカウントを増やすだけです。
ウェブ リクエスト
ライブラリは、次の 2 種類のリクエストをサーバー エンドポイントに送信します。
- 初期化時の
generateTuningParameters
リクエスト - ゲームプレイ中、定期的にサーバーにデータを送信する
uploadTelemetry
リクエスト
オフライン プレーヤー
初期化時に使用可能な接続がない場合、バックオフ時間を延ばしながらリクエストを数回再試行します。アップロード時に接続がない場合、アップロードはキャッシュに保存されます。アップロードは、一時ファイルとして保存されます。
要件
ゲームでプラグインを使用するには、サポートされているバージョンの Unity を使用します。
- Unity バージョン 2017.4 以降と .NET バージョン 4.6
- APK 拡張ファイルを使用するには Unity 2018.2 が必要です
- 強化されたフレーム ペーシングと GPU 測定には、Unity バージョン 2019.3.14 以降が必要です
- Addressables のシーンをサポートするには、Unity 2019.3 以降と Addressables パッケージ 1.19.4 以降が必要です。
Unity で Android Performance Tuner を統合する
Unity で Android Performance Tuner を統合する方法については、API を有効にするをご覧ください。