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 ファイルのバージョン番号がパッケージのバージョン番号と一致している
アーカイブ名です。プラグインをインストールする手順は次のとおりです。
- .aar ファイルを
Assets/Android/Plugins
ディレクトリの できます。(必要な場合は、必要なAndroid
サブディレクトリとPlugins
サブディレクトリを作成します。 ありません)。
- Unity の [Project] 階層で
VkQuality-1.x.x
プラグイン ファイルを選択します。 [Inspector] ペインに [Import Settings] を表示します。必ず、 [Android] プラットフォームがオンになっている。
カスタム アクティビティを使用して VkQuality を呼び出す
一般的な Unity エンジン プラグインとは異なり、VkQuality を実行して Unity エンジンを初期化する前のグラフィック API の推奨事項。その後、 Unity Player のコマンドライン引数機能を使用して、 VkQuality 推奨値に基づく Graphics API を使用します。Android では、 コマンドライン引数を使用するには、コマンド ライン引数のデフォルトの動作を UnityPlayerActivity。 アクティビティです。
ゲームですでにカスタム アクティビティを使用している場合は、 既存のカスタム アクティビティ] セクションに表示されます。新しいカスタム アクティビティを 手順については、次の Unity プロジェクトにカスタム アクティビティを追加するをご覧ください。
Unity エンジン プロジェクトにカスタム アクティビティを追加する
VkQuality を使用するカスタム アクティビティのサンプルがプラグインに含まれています。
パッケージを Assets/Plugins/Android/VkQualityTestActivity.java
に格納します。
ファイルをカスタマイズしてゲームで使用する手順は次のとおりです。
VkQualityTestActivity.java
ファイルをAssets/Plugins/Android
ディレクトリ。- ゲームに適した名前に変更してください(例:
MyGameActivity.java
)。 - テキスト エディタでファイルを開きます。
- クラス名を
VkQualityTestActivity
から、クラス名に付けた名前に変更します。 (例:MyGameActivity.java
)。 - パッケージ名を
com.google.android.games.VkQualityTest
から Unity の [Project Settings] の [Package Name] フィールドの値と一致させます。 [Other Settings] の [Player] カテゴリ(例:com.mycompany.mygame
など)。 - ファイルを保存して閉じます。
カスタム アクティビティを参照するカスタム マニフェスト ファイルを追加して Unity に指示する カスタム マニフェスト ファイルを使用するには:
Assets/Plugins/Android
からAndroidManifest.xml
ファイルをコピーします。 プラグイン パッケージのディレクトリをプロジェクトのAsset/Plugins/Android
ディレクトリに配置します。 されます。- テキスト エディタでファイルを開きます。
activity android:name
設定の値をcom.google.android.games.VkQualityTest.VkQualityTestActivity
を パッケージ名とアクティビティ名(com.mycompany.mygame.MyGameActivity
)。- ファイルを保存して閉じます。
- Unity 設定ウィンドウを開き、[Player] 設定を選択します。展開 [Publishing Settings] セクションに移動し、[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 にあります。