Androidのバージョンに応じてVulkanとOpenGLESを切り替える

発端:Android10~12でクラッシュする問題が発生

Android版リリース後、一部端末でクラッシュする事例が発生しました。

最終的にはWarmupAllShadersの使用をやめることで解決しましたが、そこに至るまでにAndroidのバージョンに応じてVulkanとOpenGLESを切り替える方法も試しました。

需要があるか不明(多分ない)ですがその方法についても一応記録しました。

Android12以前はOpenGLES、13以降はVulkanを使いたい

どうもAndroid12以前ではVulkanのバージョンが古く、それが原因でクラッシュしているようでしたので、Android12以前はOpenGLES、13以降はVulkanを使いたい。

その方法は意外と簡単でした。

PlayerSettingsのOtherSettingsに、「Android Vulkan Deny Filter List」、つまりVulkan拒否リストを設定できるので、ここに追記してやればokです。

色々細かく設定でき、特定のVulkanのバージョンを拒否ということもできます。

Unity – マニュアル: Android Player の設定

正規表現が使えるようですので、Android10~12を拒否したい場合は以下のように設定します。

なお、逆にAllow Filter List、つまり許可リストの設定もあるので特定の端末やバージョンのみVulkanとすることも可能です。

拒否リスト対象端末をOpenGLESにフォールバックさせるためには、以下のようにGraphics APIsのリストにVulkan、OpenGLES3の順でセットします。

Vulkanしか設定しなかった場合、拒否リスト対象端末で起動すると以下のようなエラー画面が表示されます。

ちなみにカスタムアクティビティを作って、起動時に切り替える方法もあるようですが、面倒なのでおすすめしません。一体何のメリットがあるか不明です。

なお、どのGraphic API(OpenGLES or Vulkan)で動いているかはSystemInfo.graphicsDeviceTypeで取得可能です。

ちなみに、OpenGLESにするとクラッシュしなくなったものの、何故か環境光が全く適用されなくなる謎すぎるバグが生じたので結局Vulkanに戻しました。こちらに関しては未だに原因不明。

コメント

  1. THC gummies より:

    Good shout.

タイトルとURLをコピーしました