VkQuality Unity エンジン プラグイン

Unity エンジン用の VkQuality プラグインが起動時の推奨事項を提供する などのグラフィック API(Vulkan または OpenGL ES)を使用することを、 できます。

VkQuality は、Unity よりも制限が厳しいデバイスセットで Vulkan を推奨しています 許可するように構成されています。VkQuality を使用すると、 Vulkan を使用しながら、新しいグラフィックを搭載した新しいデバイスのみに Vulkan の使用を制限します これにより、ドライバの問題にゲームがさらされる可能性を抑えられます。VkQuality のみ 品質に関する推奨事項を提示するものであり、保証するものではありません。 推奨されたデバイスでドライバの問題が発生した場合。VkQuality はカスタムリストをサポートし 自分に合ったおすすめのデバイスを追加または削除することができます。 説明します。

Unity エンジンゲームで Vulkan を有効にする

VkQuality では、ゲームに OpenGL ES と Vulkan の両方のレンダラが必要です。 有効にする必要があります。[Auto Graphics API オプションを選択するか、グラフィック API を手動で設定します。

Unity エンジン用の VkQuality プラグインを入手する

GitHub から VkQuality プラグインをダウンロードします。プラグインは、 Unity 2021 以降と互換性があります。有効にするには Unity 2021 LTS 以降を使用してください Android の Vulkanプラグイン パッケージには、基本的なサンプル プロジェクトが含まれており、 このプラグインを使用して起動時にグラフィック API を設定し、 デバイスのアクティブなグラフィック API。

VkQuality の Vulkan 推奨事項リストを管理する

VkQuality には、サポート対象デバイスのデフォルトの推奨リストが含まれています。対象 カスタムの推奨事項リストの使用について詳しくは、カスタムの推奨事項 推奨事項のリストをご覧ください。

推奨事項のリストには、次の 3 つのカテゴリがあります。

  • Vulkan デバイスの許可リスト
  • GPU 推奨事項の許可リスト
  • GPU 推奨事項の拒否リスト

デバイスの許可リストの一致

VkQuality はまず、アクティブなデバイスがデバイス許可対象に含まれているかどうかを確認します。 Android の最小バージョンと Vulkan ドライバが搭載されているかどうか そのデバイスの許可リストで指定されたバージョン。これらの条件を満たしていれば VkQuality は Vulkan を RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH 列挙値。

デバイスが許可リストに含まれているが、Android バージョンまたはドライバを実行している場合 許可リストで指定されている最小バージョンを下回っているため、VkQuality です。 RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER を返して OpenGL ES を推奨します。

GPU の推奨事項が一致

一致するデバイスがデバイスの許可リストで見つからない場合、VkQuality は以下を評価します。 GPU の推奨事項の許可と拒否に対する GPU モデルとドライバのバージョン できます。GPU モデルとドライバのバージョンが GPU のエントリと一致する場合 VkQuality は、推奨する Vulkan のリストに RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH 列挙型定数。

GPU モデルとドライバのバージョンが GPU のエントリと一致するかどうか VkQuality は推奨事項の拒否リストに基づき OpenGL ES を RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH

一致するものがないおすすめ

一致するものが見つからない場合、VkQuality は Vulkan を推奨します(Android API レベルが リリースされる API レベル以上であることを おすすめしますデフォルトの推奨事項のリストは、将来の API レベル 36(API レベル 36 以降を搭載している一致しないデバイスで意味すること)、VkQuality RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID 列挙型定数を返します。

デバイスの許可リストまたは GPU 推奨事項のリストで一致するものが見つからない場合、 デバイスの API レベルが Future API レベル(VkQuality)を下回っている RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH を返して OpenGL ES を推奨します。

VkQuality アーカイブ ファイルをプロジェクトに追加する

VkQuality プラグインは VkQuality-1.x.x.aar ダウンロードしたパッケージ アーカイブの Assets/Android/Plugins ディレクトリ。実際の .aar ファイルのバージョン番号がパッケージのバージョン番号と一致している アーカイブ名です。プラグインをインストールする手順は次のとおりです。

  1. .aar ファイルを Assets/Android/Plugins ディレクトリの できます。(必要な場合は、必要な Android サブディレクトリと Plugins サブディレクトリを作成します。 ありません)。
で確認できます。 <ph type="x-smartling-placeholder">
</ph> 必要なプロジェクト ディレクトリにある VkQuality .aar ファイル。
図 1. 必要なプロジェクト ディレクトリにある VkQuality .aar ファイル
  1. Unity の [Project] 階層で VkQuality-1.x.x プラグイン ファイルを選択します。 [Inspector] ペインに [Import Settings] を表示します。必ず、 [Android] プラットフォームがオンになっている。
図 2. VkQuality プラグインのプラットフォーム インポート設定
図 2. VkQuality プラグインのプラットフォーム インポート設定。

カスタム アクティビティを使用して VkQuality を呼び出す

一般的な Unity エンジン プラグインとは異なり、VkQuality を実行して Unity エンジンを初期化する前のグラフィック API の推奨事項。その後、 Unity Player のコマンドライン引数機能を使用して、 VkQuality 推奨値に基づく Graphics API を使用します。Android では、 コマンドライン引数を使用するには、コマンド ライン引数のデフォルトの動作を UnityPlayerActivity アクティビティです。

ゲームですでにカスタム アクティビティを使用している場合は、 既存のカスタム アクティビティ] セクションに表示されます。新しいカスタム アクティビティを 手順については、次の Unity プロジェクトにカスタム アクティビティを追加するをご覧ください。

Unity エンジン プロジェクトにカスタム アクティビティを追加する

VkQuality を使用するカスタム アクティビティのサンプルがプラグインに含まれています。 パッケージAssets/Plugins/Android/VkQualityTestActivity.java に格納します。 ファイルをカスタマイズしてゲームで使用する手順は次のとおりです。

  1. VkQualityTestActivity.java ファイルを Assets/Plugins/Android ディレクトリ。
  2. ゲームに適した名前に変更してください(例: MyGameActivity.java)。
  3. テキスト エディタでファイルを開きます。
  4. クラス名を VkQualityTestActivity から、クラス名に付けた名前に変更します。 (例: MyGameActivity.java)。
  5. パッケージ名を com.google.android.games.VkQualityTest から Unity の [Project Settings] の [Package Name] フィールドの値と一致させます。 [Other Settings] の [Player] カテゴリ(例: com.mycompany.mygame など)。
  6. ファイルを保存して閉じます。

カスタム アクティビティを参照するカスタム マニフェスト ファイルを追加して Unity に指示する カスタム マニフェスト ファイルを使用するには:

  1. Assets/Plugins/Android から AndroidManifest.xml ファイルをコピーします。 プラグイン パッケージのディレクトリをプロジェクトの Asset/Plugins/Android ディレクトリに配置します。 されます。
  2. テキスト エディタでファイルを開きます。
  3. activity android:name 設定の値を com.google.android.games.VkQualityTest.VkQualityTestActivity を パッケージ名とアクティビティ名( com.mycompany.mygame.MyGameActivity)。
  4. ファイルを保存して閉じます。
  5. Unity 設定ウィンドウを開き、[Player] 設定を選択します。展開 [Publishing Settings] セクションに移動し、[Custom Main Manifest] をオンにします。 選択します。
で確認できます。 <ph type="x-smartling-placeholder">
</ph> 図 3. Unity Player 設定の [Custom Main Manifest] オプション
図 3. Unity Player 設定の [Custom Main Manifest] オプション

これでプロジェクトは、VkQuality を呼び出すカスタム アクティビティを使用するように設定されました。 VkQuality の推奨事項に基づいて Vulkan または OpenGL ES を選択します。

既存のカスタム アクティビティに VkQuality を追加する

デフォルトをオーバーライドするカスタム アクティビティがゲームにある場合 UnityPlayerActivity、以下を追加して VkQuality の推奨事項を組み込みます。 コード:

まず、最上部のインポートのリストに VkQuality import ステートメントを追加します。 カスタム アクティビティ ファイル:

Kotlin

import com.google.android.games.vkquality.VKQuality;

Java

import com.google.android.games.vkquality.VKQuality;

次に、Activity クラスの本体に定数を作成します。 グラフィック API の選択肢:

Kotlin

companion object {
  private const val OVERRIDE_NONE = 0
  private const val OVERRIDE_GLES = 1
  private const val OVERRIDE_VULKAN = 2

Java

private static final int OVERRIDE_NONE = 0;
private static final int OVERRIDE_GLES = 1;
private static final int OVERRIDE_VULKAN = 2;

API の選択を追跡するための変数を作成します。

Kotlin

private var apiOverride = OVERRIDE_NONE

Java

private int apiOverride = OVERRIDE_NONE;

次の関数を Activity クラスに追加します。

Kotlin

private fun CheckVkQuality() {
    val vkQuality = VKQuality(this)
    val startResult = vkQuality.StartVkQuality("")
    if (startResult == VKQuality.INIT_SUCCESS) {
        // In the current release, we can assume GetVkQuality is
        // ready as soon as StartVkQuality has returned success.
        val getResult = vkQuality.GetVkQuality()
        LogVkQualityResult(getResult)
        apiOverride =
            when (getResult) {
                VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH,
                VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH,
                VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID -> OVERRIDE_VULKAN
                VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE,
                VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER,
                VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH,
                VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH -> OVERRIDE_GLES
                else -> OVERRIDE_GLES
            }
        vkQuality.StopVkQuality()
    } else {
        Log.e("VKQUALITY", "VkQuality start failed with result: $startResult")
    }
}

Java

private void CheckVkQuality() {
  VKQuality vkQuality = new VKQuality(this);
  // An empty string specifies use of the default
  // built-in device list file.
  int startResult = vkQuality.StartVkQuality("");
  if (startResult == VKQuality.INIT_SUCCESS) {
      // In the current release, we can assume GetVkQuality is
      // ready as soon as StartVkQuality has returned success.
      int getResult = vkQuality.GetVkQuality();

      switch (getResult) {
          case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH:
          case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH:
          case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID:
              apiOverride = OVERRIDE_VULKAN;
              break;
          case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE:
          case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER:
          case VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH:
          case VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH:
          default:
              apiOverride = OVERRIDE_GLES;
              break;
      }
      vkQuality.StopVkQuality();
  } else {
      Log.e("VKQUALITY", "VkQuality start failed with result: " + startResult);
  }
}

onCreate() オーバーライドの先頭から CheckVkQuality 関数を呼び出す 関数を呼び出してから、基本クラスの実装を呼び出します。

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  CheckVkQuality()
  super.onCreate(savedInstanceState)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    CheckVkQuality();
    super.onCreate(savedInstanceState);
}

最後に、updateUnityCommandLineArguments() 関数のオーバーライドを追加します。 これは、apiOverride の値を使用してコマンドライン引数を 使用するグラフィック API を指定する Unity エンジン:

Kotlin

override fun updateUnityCommandLineArguments(cmdLine: String): String {
  if (apiOverride == OVERRIDE_VULKAN) {
      Log.i("VKQUALITY", "Passing -force-vulkan")
      return appendCommandLineArgument(cmdLine, "-force-vulkan")
  } else if (apiOverride == OVERRIDE_GLES) {
      Log.i("VKQUALITY", "Passing -force-gles")
      return appendCommandLineArgument(cmdLine, "-force-gles")
  }
  Log.i("VKQUALITY", "No override passed")
  // let Unity pick the Graphics API based on PlayerSettings
  return cmdLine
}

private fun appendCommandLineArgument(cmdLine: String, arg: String?): String {
    return if (arg == null || arg.isEmpty()) cmdLine
    else if (cmdLine == null || cmdLine.isEmpty()) arg else "$cmdLine $arg"
}

Java

@Override protected String updateUnityCommandLineArguments(String cmdLine)
{
    if (apiOverride == OVERRIDE_VULKAN) {
        Log.i("VKQUALITY", "Passing -force-vulkan");
        return appendCommandLineArgument(cmdLine, "-force-vulkan");
    }
    else if (apiOverride == OVERRIDE_GLES) {
        Log.i("VKQUALITY", "Passing -force-gles");
        return appendCommandLineArgument(cmdLine, "-force-gles");
    }
    Log.i("VKQUALITY", "No override passed");
    // let Unity pick the Graphics API based on PlayerSettings
    return cmdLine;
}

private String appendCommandLineArgument(String cmdLine, String arg) {
    if (arg == null || arg.isEmpty())
        return cmdLine;
    else if (cmdLine == null || cmdLine.isEmpty())
        return arg;
    else
        return cmdLine + " " + arg;
}

カスタム アクティビティが起動時に VkQuality を呼び出し、Vulkan または OpenGL を選択するようになりました。 VkQuality の推奨値に基づく ES。

カスタムの推奨事項リストを使用する

ファイルの名前を渡すことで、カスタムの推奨事項リストファイルを指定します 空の文字列を渡す代わりに、StartVkQuality() にリストを含めます。

Kotlin

val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")

Java

int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");

VkQuality はまずアプリケーションの内部ストレージでファイルを検索します。 されます。ファイルが内部ストレージにない場合、VkQuality は このファイルは、App Bundle のアセットから取得できます。どちらの場所にファイルもない場合は VkQuality は ERROR_MISSING_DATA_FILE 列挙値を返します。

カスタムの推奨事項リストファイルを作成するには、VkQuality List Editor を使用してください。 このツールは GitHub リポジトリ にあります。「 ツールは README にあります。