Поскольку все больше и больше телефонов Android поддерживают как GLES, так и Vulkan, разработчики мобильных игр часто сталкиваются с проблемой: можем ли мы выбрать, какой графический API использовать при запуске игры на конкретном устройстве?

Короткий ответ: да.

Давайте выберем правильный графический API во время выполнения

После Unity 2018.4 Unity предоставляет функцию добавления аргументов командной строки в UnityPlayerActivity. Вы можете добавить аргументы командной строки. например, -force-gles20, -force-gles30, -force-gles31, -force-gles31aep и -force-vulkan, чтобы принудительно использовать выбранный графический API.

Вы можете экспортировать проект и открыть его в Android Studio, а затем изменить файл UnityPlayerActivity.java. Вот пример:

String deviceName = android.os.Build.MODEL;
 
 
 // Setup activity layout
 @Override protected void onCreate(Bundle savedInstanceState)
 {
     requestWindowFeature(Window.FEATURE_NO_TITLE);
     super.onCreate(savedInstanceState);
 
     if(deviceName.equals("SM-C9000"))
     {
         this.getIntent().putExtra("unity", "-force-gles30");
     }
 
     mUnityPlayer = new UnityPlayer(this);
     setContentView(mUnityPlayer);
     mUnityPlayer.requestFocus();
 }

Здесь я использую относительно старый Samsung Device SM-C9000. И создайте проект с помощью графического API Vulkan и OpenGLES. Я хочу выбрать относительно старый графический API на этом старом устройстве, поэтому я задал аргумент командной строки для использования графического API OpenGLES.

Тогда в результате наша игра будет работать на этом устройстве SM-C9000 с использованием OpenGLES 3.0. С другой стороны, он будет использовать Vulkan при работе на других устройствах Android.

Ошибка и исправление

Да, когда эта функция была впервые выпущена, там была ошибка (звучит знакомо 🙂).

Этот баг легко описать, то есть эта функция эффективна только в девелоперской сборке.

Проще говоря, я протестировал его в Unity2018.4.5 и обнаружил, что для сборки разработки можно выбрать Graphic API. Но это не влияет на сборку релиза.

Как видите, релизная сборка того же проекта и аргумент командной строки API выбора графики не работают. Он выбрал вариант по умолчанию, то есть Vulkan.

И идентификатор этой ошибки 1195061. Хорошая новость заключается в том, что эта ошибка исправлена ​​в Unity 2018.4.16f1. АГА!

Теперь вы можете выбрать желаемый графический API во время выполнения на устройствах Android.