Поскольку все больше и больше телефонов 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.