Android Performance Tuner(Unity)の概要

このガイドでは、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 を有効にするをご覧ください。