ライブラリの初期化と動作確認

このページでは、ゲームコードでライブラリを初期化し、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 秒に設定されていることを確認する手順は次のとおりです。

  1. [Google] > [Android Performance Tuner] を選択して、設定にアクセスします。
  2. [Instrumentation Settings] タブを選択し、[Use advanced settings] をクリックします。
  3. [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 ファイルに追加します。

マネージド コード ストリップの詳細については、Unity のドキュメントをご覧ください。

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.
}

詳細については、Unity のドキュメントのスクリプトの制限をご覧ください。