このページでは、ゲームコードでライブラリを初期化し、Google Play にデータがアップロードされていることを確認する方法について説明します。特定のライブラリ関数の詳細な情報を見つけるには、リファレンス ドキュメントをご覧ください。
ライブラリを初期化する
ゲーム開始時の初期化メソッドで、AndroidPerformanceTuner
をインスタンス化してその Start()
メソッドを呼び出すことにより、ライブラリを初期化します。
using Google.Android.PerformanceTuner;
using UnityEngine;
public class SomeBehaviour : MonoBehaviour
{
AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
new AndroidPerformanceTuner<FidelityParams, Annotation>();
void Start()
{
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
}
Android Performance Tuner を開始してゲームのインストルメンテーションを行うには、このコードで十分です。ログ ステートメントは、Android Performance Tuner が開始された時間と、Google Play Console API にテレメトリーがアップロードされた時間を示します。後でこれらのステートメントを検索して、プラグインが正常に動作していることを確認します。
遅延初期化(Vulkan のみ)
Vulkan をターゲットとするゲームで Android フレーム ペーシングを使用する場合、Android Performance Tuner は遅延初期化を必要とします。
IEnumerator Start()
{
yield return new WaitForEndOfFrame();
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
テレメトリー アップロードの間隔を確認する
プラグイン設定のテレメトリー アップロードの間隔は、デフォルトでは 30 秒です。テレメトリーが適切にアップロードされていることを簡単に検証できるように、ここでは短い間隔を設定します。ゲームを本番環境にリリースする場合は、長い間隔(たとえば 10 分)を設定して、ゲームが API に過剰なリクエストを行わないようにします。これは特に、モバイルデータ プランのデータ量が無制限でないユーザーにとって重要です。また、間隔を長くすると、デバイスの電池の消耗を抑えられます。
間隔が 30 秒に設定されていることを確認する手順は次のとおりです。
- [Google] > [Android Performance Tuner] を選択して、設定にアクセスします。
- [Instrumentation Settings] タブを選択し、[Use advanced settings] をクリックします。
- [Intervals (minutes)] フィールドが「0.5」になっていることを確認します。
プラグインの [Instrumentation settings] タブ
適切に動作することを確認する
IL2CPP またはコード ストリッピングを使用している場合は、コード ストリッピングを管理するをご覧ください。
Android 用にゲームをビルドします。デバイス上でゲームを起動した状態で、パソコンでターミナルを開いて adb logcat
を起動します。
adb logcat
adb logcat
の出力で「TuningFork」(Tuning Fork はライブラリの内部名であるため)を検索します。
02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:
[...]
02-03 16:55:45.116 10511 10536 I Unity : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters
プラグインの設定中に、API キーの設定を忘れるなどのミスがあった場合は、初期化ログにエラーが見つかります。
02-03 16:49:44.970 8815 8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971 8815 8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972 8815 8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972 8815 8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972 8815 8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973 8815 8831 I Unity : Tuningfork started with code: BadParameter
Android Performance Tuner がテレメトリーをアップロードしているかどうかを確認します。ログに TuningFork
initialized
が見つかった場合は、少し待ってから、テレメトリーがアップロードされていることを示すログを探します。
02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}
ログの中の「Connecting to:」も検索します。このメッセージの後に、レスポンス コードの行がいくつか続きます。
テレメトリー アップロードのログが見つからない場合は、Android Performance Tuner の設定でアップロード間隔が適切な小さい値(30 秒など)に設定されているかどうかを確認してください。
コード ストリッピングを管理する
Google.Protobuf.dll
はリフレクションを使用します。コード ストリッピング中に、必要なコードの一部が削除される可能性があります。このような削除を回避するため、プラグインには、保持する必要があるシンボルに関する情報を含む link.xml
ファイルが用意されています。リフレクションを使用する protobuf の一部の機能が必要で、コード ストリッピングが有効になっている場合は、シンボルを保持するためにこの情報を link.xml
ファイルに追加します。
詳しくは、 マネージド コード ストリッピング ご覧ください。
protobuf のすべてのシンボルを保持する必要がある場合は、次の行を含む link.xml
ファイルをプロジェクトに追加します。
<linker>
<assembly fullname="Google.Protobuf" preserve="all"/>
</linker>
事前コンパイル(AOT)
IL2CPP バックエンドと Unity バージョン 2017 および 2018 では、事前コンパイルが必須です(ただし、それより新しいバージョンの Unity では必須ではありません)。
AOT コンパイラは、汎用メソッドのコードを生成しない場合があります。次のメソッドを追加することにより、protobuf に必要な適切なコードを生成するようコンパイラに強制する必要があります。
using Google.Protobuf.Reflection;
using UnityEngine.Scripting;
...
// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
FileDescriptor.ForceReflectionInitialization<Scene>();
FileDescriptor.ForceReflectionInitialization<ShadowType>();
FileDescriptor.ForceReflectionInitialization<LevelType>();
...
// Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
// You can find the list of enums in DevTuningfork.cs -> enum section
// or in the list of enums in Google -> Android Performance Tuner.
}
詳しくは、 スクリプトの制限 ご覧ください。