Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Разделы на этой странице:

Расширение файла UnityPlayerActivity

При разработке приложения Unity для Android можно использовать подключаемые модулиНабор кода, созданный вне Unity, который создает функциональность в Unity. В Unity можно использовать два типа подключаемых модулей: управляемые подключаемые модули (управляемые сборки .NET, созданные с помощью таких инструментов, как Visual Studio) и собственные подключаемые модули (библиотеки собственного кода для конкретной платформы). Подробнее
См. в Словарь
, чтобы расширить стандартный UnityPlayerActivity (основной класс Java для проигрывателя Unity на Android, аналогичный AppController.mm на Unity iOS). Приложение может переопределить все основные взаимодействия между ОС Android и Android-приложением Unity.

Чтобы переопределить действие по умолчанию:

  • Создайте новую Activity, производную от UnityPlayerActivity (см. документацию Android на Активность);
  • Измените манифест приложения Android, чтобы использовать новую Activity в качестве точки входа приложения.

Самый простой способ добиться этого — экспортировать проект из Unity, а затем внести необходимые изменения в класс UnityPlayerActivity в Android Studio. Или вы можете создать новый класс, расширить его, изменить AndroidManifest.xml в проекте unityLibrary, а затем заменить UnityPlayerActivity на ваш класс.

Чтобы создать подключаемый модуль с новым Activity и добавить его в свой проект, выполните следующие действия:

  1. Расширьте файл UnityPlayerActivity. Лучше всего это сделать в Android Studio после экспорта проекта из Unity. Затем у вас есть следующие варианты:
    • Поместите файл .java или .kt, содержащий класс активности, непосредственно в проект Unity. По умолчанию файл находится по адресу:
      • macOS::/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/src/com/unity3d/player
      • Windows:: C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player
    • Создайте библиотеку Java, содержащую ваш класс, скомпилируйте ее и поместите полученный файл .jar в свой проект Unity.
    • Создайте библиотеку Android, содержащую ваш класс. Затем вы можете поместить эту библиотеку в свой проект Unity в своем исходном коде. Для этого дайте вашей папке имя с расширением .androidlib или ее можно скомпилировать и поместить полученный файл .aar в ваш проект Unity
  2. Создайте новый манифест приложения Android, чтобы установить новую Activity в качестве точки входа вашего приложения, а затем поместите AndroidManifest.xml в папке Assets/Plugins/Android вашего проекта.

Указание аргументов запуска Unity из пользовательского файла UnityPlayerActivity

При расширении UnityPlayerActivity можно переопределить String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine) для передачи аргументов запуска в Unity.

UnityPlayerActivity вызывает этот метод во время запуска. Он принимает текущие аргументы командной строки, которые могут быть нулевыми или пустыми, и возвращает новую строку аргументов командной строки для передачи в Unity.

Общий обзор интерфейса командной строки Unity см. в разделе Аргументы командной строки.

В следующем примере показано, как использовать это для выбора Graphics API на основе текущего устройства:

package com.company.product; import com.unity3d.player.UnityPlayerActivity; import android.os.Bundle; import android.os.Build; public class OverrideExample extends UnityPlayerActivity { private boolean preferVulkan() { // Use Vulkan on Google Pixel devices if (Build.MANUFACTURER.equals("Google") && Build.MODEL.startsWith("Pixel")) return true; else return false; } private boolean preferES2() { // Use OpenGL ES 2.0 on devices that run Android 5.1 or older if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) return true; else return false; } 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; } @Override protected String updateUnityCommandLineArguments(String cmdLine) { if (preferVulkan()) return appendCommandLineArgument(cmdLine, "-force-vulkan"); else if (preferES2()) return appendCommandLineArgument(cmdLine, "-force-gles20"); else return cmdLine; // let Unity pick the Graphics API based on PlayerSettings } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }

Ниже приведен пример файла UnityPlayerActivity:

OverrideExample.java: package com.company.product; import com.unity3d.player.UnityPlayerActivity; import android.os.Bundle; import android.util.Log; public class OverrideExample extends UnityPlayerActivity { protected void onCreate(Bundle savedInstanceState) { // call UnityPlayerActivity.onCreate() super.onCreate(savedInstanceState); // print debug message to logcat Log.d("OverrideActivity", "onCreate called!"); } public void onBackPressed() { // instead of calling UnityPlayerActivity.onBackPressed() we just ignore the back button event // super.onBackPressed(); } }

Соответствующий AndroidManifest.xml может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.product"> <application android:icon="@drawable/app_icon" android:label="@string/app_name"> <activity android:name="com.YourPackage.name.OverrideExample" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Чтобы создать подключаемый модуль с новой активностью и добавить его в свой проект, необходимо выполнить следующие действия:

  1. Расширьте файл UnityPlayerActivity. Лучше всего это делать в Android Studio после экспорта проекта из Unity. Есть несколько вариантов:
    • Файл .java или .kt, содержащий ваш класс действий, можно поместить в проект Unity.
    • Создайте библиотеку Java, содержащую ваш класс, скомпилируйте ее и поместите полученный файл .jar в проект Unity.
    • Создайте библиотеку Android, содержащую ваш класс; эту библиотеку можно поместить в проект Unity в исходном коде (назвав папку «расширением» .androidlib) или ее можно скомпилировать, а полученный файл .aar поместить в проект Unity.
  2. Создайте новый манифест приложения Android, чтобы установить новую активность в качестве точки входа вашего приложения, а затем поместите файл AndroidManifest.xml в папку Assets/Plugins/Android вашего проекта.

  • Добавлен новый пример кода в 2019.2.
  • Обновленный пример AndroidManifest для Unity 2019.3 и более поздних версий
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3