10 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Профилируем Unity проект с Android Studio

Содержание

Как собрать проект Unity для смартфона или планшета

Опишем процесс сборки проекта под платформу Android, которая поддерживается большинством смартфонов.

Для начала сборки необходимо открыть окно Build Settings из пункта меню File -> Build Settings… (или нажать комбинацию клавиш Ctrl + Shift + B):

Окно Build Settings

Шаг 1. Выбор платформы

В окне Build Settings выбрать платформу Android и нажать на кнопку Switch Platform:

Выбор платформы Android

Шаг 2. Проверить и отредактировать (если надо) настройки в в окне Project Settings, в разделе Player:

1) заполнить поля:

Company Name (писать по-английски и лучше без знаков препинания и пробелов),

Product Name (аналогично – по-английски и без специальных символов и пробелов),

Version (можно оставить значение по умолчанию, но если приложение собирается повторно, то значение надо менять на большее; тогда при установке новой версии приложения на смартфон существующее приложение обновится. Если это число оставить прежним, потребуется сначала удалить установленное ранее приложение).

2) задать изображение для иконки приложения, добавив его в Default Icon.

3) если необходимо, в разделе Resolution and Presentation можно зафиксировать ориентацию приложения: горизонтальное (Landscape) или вертикальное (Portrait):

Ориентация приложения

4) в разделе Other Settings проверить правильность сформированного идентификатора в поле Package Name:

com.Company.ProductName – здесь правильно должны быть записаны компоненты Company и ProductName. При их записи должны быть использованы ТОЛЬКО буквы латинского алфавита, БЕЗ специальных символов и пробелов.
Примечание: в Unity 2019 эти компоненты заполняются автоматически после заполнения полей Company Name и Product Name в самом начале окна Project Settings, в разделе Player (см. п.1).

Например, итоговая строка com.Company.ProductName может получить следующий вид:

Это минимальный набор настроек, которые стоит отредактировать. После этого окно Project Settings можно закрыть.

Шаг 3. Перечислить в окне Build Settings сцены, которые должны попасть в сборку (build) проекта:

Если сцена всего одна, и она открыта в редакторе, можно просто нажать на кнопку Add Open Scenes.

Дополнительные сцены можно перетащить мышью из нужной папки окна Project.

Если в окне Scenes in Build указана не та сцена, её можно выделить мышью и удалить, нажав на клавишу Delete на клавиатуре компьютера.

Шаг 4. Нажать на кнопку Build в правом нижнем углу окна Build Settings, указать папку и имя собираемого файла в формате .apk и нажать на кнопку Сохранить (Save):

Собранный файл .apk переписать на смартфон, открыть его на смартфоне и установить приложение. После этого можно начать тестировать свою мобильную игру или приложение на смартфоне.

Экспорт и запуск проекта Unity3D в Android Studio

Я хочу получать журналы из Unity Application при работе на Android-телефоне. Для этого мне нужно экспортировать проект Android из Unity3D и запустить его с помощью Android Studio. Я делаю следующие шаги:

  1. Экспорт проекта из Unity3D, выбрав параметры Google Android Project из настроек проигрывателя.
  2. Откройте Android Studio и импортируйте проект с автогенерированием из диска местоположения.
  3. Выберите « Создать» -> «Сделать проект».
  4. Выберите Run -> Run ‘ModuleName’.

Я получаю следующие ошибки в консоли Gradle:

FAILURE: Сбой сборки с исключением.

Что пошло не так: выполнение выполнено для задачи ‘:’ ModuleName ‘: transformClassesWithDexForDebug’. Java.lang.UnsupportedClassVersionError: com / android / dx / command / Main: Неподдерживаемая версия major.minor 52.0 в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass (ClassLoader.java:800) на Java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142) в java.net.URLClassLoader.defineClass (URLClassLoader.java:449) в java.net.URLClassLoader.access $ 100 (URLClassLoader.java:71) на java.net. URLClassLoader $ 1.run (URLClassLoader.java:361) в java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader. Java: 354) в java.lang.ClassLoader.loadClass (ClassLoader.java:425) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java.308) в java.lang.ClassLoader.loadClass (ClassLoader.java:358 ) На sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:482) Исключение в потоке «main»

Com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command’ C: Program Files Java jdk1.7.0_79 bin java.exe » завершен с не- Нулевое значение выхода 1

Попробуйте: запустите с опцией –stacktrace, чтобы получить трассировку стека. Запустите с опцией –info или –debug, чтобы получить больше выходных данных журнала.

Общее время: 0.788 secs

Java.lang.UnsupportedClassVersionError: com / android / dx / command / Main: Неподдерживаемая версия major.minor 52.0 в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass (ClassLoader.java:800) на Java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142) в java.net.URLClassLoader.defineClass (URLClassLoader.java:449) в java.net.URLClassLoader.access $ 100 (URLClassLoader.java:71) на java.net. URLClassLoader $ 1.run (URLClassLoader.java:361) в java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader. Java: 354) в java.lang.ClassLoader.loadClass (ClassLoader.java:425) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java.308) в java.lang.ClassLoader.loadClass (ClassLoader.java:358 ) На sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:482) Исключение в потоке «main»

Я давно работаю с Eclipse, но никогда не сталкивался с этим раньше. Может ли кто-нибудь вести меня, как успешно запустить проект Unity-Android в Android Studio?

Экспорт и запуск проекта Unity3D для Android Studio не очень сложно. Убедитесь, что у вас установлена ​​последняя версия Unity (5.4) и Android Studio (2.1.3) . Эти шаги были сделаны с вышеупомянутой версией.

ЭКСПОРТ ДЛЯ Android Studio :

1. Создайте корневую папку, в которой будут храниться экспортированные папки и файлы. Назовем это AndroidTestProject в этом случае, а полным каталогом будет C:/AndroidTestProject .

2. Экспортирование в C:/AndroidTestProject .

A. Файл -> Настройки сборки …

B. Выберите Android слева, а затем отметьте галочкой Google Android Project .

Описание изображения :

C. Нажмите кнопку « Экспорт» .

D. Выберите C:/AndroidTestProject затем нажмите кнопку « Выбрать папку» .

Unity построит ваш проект.

После создания проекта в каталоге C:/AndroidTestProject будет создана новая папка. Эта папка будет называться независимо от имени вашего продукта в настройках проигрывателя . Это то, что мое имя продукта находится в настройках проигрывателя :

Описание изображения :

Поэтому в моем случае новое имя папки будет называться test и будет находиться в C:/AndroidTestProject/test .

ИМПОРТИНГ В Android Studio :

Создайте новую папку под названием AndroidStudio в каталоге C:/AndroidTestProject/ . Полный путь к этой папке должен быть C:/AndroidTestProject/AndroidStudio .

A. Откройте Android Studio . Когда вы открываете Android Studio, нажмите « Импортировать проект» (Eclipse ADT, Gradle и т. Д.).

Если проект импорта (Eclipse ADT, Gradle и т. Д.) Не отображается, закройте текущий проект, выбрав « Файл -> Закрыть проект» .

Описание изображения :

B. В полный каталог экспортированного проекта C:/AndroidTestProject/test затем выберите тестовую папку, которая является названием продукта вашего проекта, затем нажмите « ОК» .

Описание изображения :

C. Появится новое окно. Задайте каталог импорта C:/AndroidTestProject/AndroidStudio который был создан на шаге 1.

Описание изображения :

D. Нажмите кнопку « Далее» . Отметьте / выберите флажки:

  • Если возможно, замените банки на зависимости .
  • Если возможно, замените источники библиотек зависимостями .
  • Создайте имена модулей в стиле Gradle (CamelCase) .

Затем нажмите кнопку « Готово» .

Описание изображения :

2. Подождите, пока Android Studio загрузит ваш проект.

Вы получите сообщение об ошибке:

Ошибка: Минимальная поддерживаемая версия Gradle – 2.14.1. Текущая версия – 2.10. Если вы используете оболочку градиента, попробуйте отредактировать дистрибутивUrl в C: AndroidTestProject AndroidStudio gradle wrapper gradle-wrapper.properties до gradle-2.14.1-all.zip Исправить оболочку Gradle и повторно импортировать проект
Настройки горловины

A. Просто нажмите на Fix Gradle wrapper и повторно импортируйте сообщение Gradle о проекте . Если вы не видите это сообщение, убедитесь, что вы находитесь на вкладке « Сообщения» . Посмотрите изображение ниже для получения дополнительной информации.

B. Подождите, пока Android Studio завершит работу над проблемой Gradle.

По завершении перейдите в « Сборка -> Сделать проект» .

Читать еще:  Evernote VS OneNote: какой сервис заметок лучше?

После того, как проект будет выполнен, перейдите в Run -> Run ‘app’ .

C. Появится новое окно. Вы можете выбрать устройство для запуска приложения, создать эмулятор или выбрать уже существующий эмулятор для запуска приложения. В этом примере мы будем использовать реальное устройство для тестирования.

В разделе Подключенные устройства выберите свое устройство и нажмите кнопку « ОК» .

Дополнительно :

А. Если вы хотите отлаживать свое приложение, вы должны включить его из Unity . Вернитесь к EXPORTING TO Android Studio 2B и включите Development Build. Также выберите « Отладка сценария» и нажмите кнопку « Экспорт» .

B. Если вы хотите видеть сообщения Debug.Log , перейдите на вкладку Android Monitor в Android Studio .

Обрезанные элементы на изображении ниже важны, чтобы знать, когда отлаживается в Android Studio.

Это не очень сложно. Если вы это сделаете один раз, вам не понадобится эта инструкция снова.

«Я хочу получать журналы из Unity Application при работе на Android-телефоне».

Вам не нужно экспортировать в проект Android, просто включите «сборку разработки» в настройках сборки, затем подключите свой телефон к компьютеру и включите «режим разработки» и «отладка сценария» на вашем телефоне.

Затем просто перейдите к пути, в котором установлен ваш sroid sroid, cd к платформенным инструментам, запустите эти команды из командной строки или терминала

Если вы хотите просто просмотреть журналы регистрации

Профилируем Unity проект с Android Studio

Всем день добрый! Это статья о том, как профайлить Unity игры на Android с Android Studio. Я расскажу о том, как настроить Android Studio и получить максимальное кол-во данных. Вопросы анализа и выводов на основе полученного результата находятся вне рамок данной статьи.

Требования

Для полноценного профилирования приложения вам потребуется телефон с Android 8 или новее (API 27). По опыту, профилирование с Android-ами более старых версий несёт больше приключений, чем пользы. По этой причине я рекомендую обзавестись полной линейкой Nexus устройств, так как они имеют старое железо и последние обновления Android-а.

Настройка Unity проекта

Для получения результата, вам придётся настроить Unity проект определённым образом.

Настройки в Build Settings

  • В первую очередь, вы должны переключить Build System в “Gradle” и поставить галочку напротив “Export Project”. Таким образом мы получим готовый Android Studio проект, который мы и будем в дальнейшем профилировать. Профилирование готового APK тоже возможна, но более ограничена и требует больше подготовки
  • Режим “Development Build” желательно выключить, так как таким образом получаемые тайминги в профайлере будут максимально близки к реальным

Настройки в Player Settings

  • Установите Scripting Backend в IL2CPP. Если оставить Mono, то при нативном профилировании мы увидим много функций Mono, без информации как они соотносятся с C# кодом.
  • Опция ‘C++ Compiler Configuration’ для Android ни на что не влияет (в Unity 2018.3). Можете поставить её в ‘Release’, возможно в будущих версиях Unity Android toolchain эта настройка будет влиять на настройки компилятора.
  • Желательно ограничить ‘Target Architecture’ до ARMv7. Так вы сэкономите на времени компиляции и по опыту множество архитектур иногда вводит Android Studio в ступор.
  • Также стоит установить ряд дополнительных настроек:
    • Install Location — ‘Prefer external’
    • Internet Access — ‘Require’
    • Write Permission — ‘External (SDCard)’

    Android Studio и другие профайлеры используют simpleperf для сбора статистики, и ему подребуется доступ к карте памяти для записи временных файлов.

Подготовка Gradle проекта

После того, как вы установили все настройки, соберите Unity проект. Вы должны получить папку с Gradle проектом.

Unity по умолчанию собирает проект из расчёта, что вы планируете собирать из него финальный APK. Потому вся отладочная информацию из него удалена, но к счастью её можно вернуть. Для этого вам нужно подменить libil2cpp.so и libunity.so на версии с отладочной информацией.

libil2cpp.so

Это файл, который содержит весь C++ код, который IL2CPP сгенерировал из вашего C# кода. Unity генерирует всю необходимую для профилирования информацию, но для оптимизации размера APK, в процессе сборки вырезает её. Для того, чтобы вернуть её:

  • Пойдите в папку вашего проекта
  • Найдите в нём в подпапку Temp и перейдите в подпапку Temp/StagingArea/symbols/armeabi-v7a
  • Найдите в ней ‘libil2cpp.so.debug’. Это версия ‘libil2cpp.so’ с отладочной информацией
  • Теперь идите в Gradle проект и найдите в нем папку ‘srcmainjniLibsarmeabi-v7a’
  • Замените ‘libil2cpp.so’ файлом ‘libil2cpp.so.debug’

libunity.so

Это файл, который содержит low-level часть Unity Player. Так как мы делаем Release сборку, то Unity положила вам в проект файл без отладочной информации. Вам нужно подменить libunity.so на файл с символами.

  • Пойдите в папку, где у вас установлена Unity
  • Перейдите в папку «DataPlaybackEnginesAndroidPlayerVariationsil2cppDevelopmentLibsarmeabi-v7a»
  • Возьмите от туда файл libunity.so, и замените файл в вашем проекте, который лежит в папке ‘srcmainjniLibsarmeabi-v7a’

Профилирование

Теперь вы можете начать профилировать в Android Studio, достаточно нажать кнопку запуска профайлера.

Android Studio запустит приложение и начнётся сэссия профилирования

По умолчанию, Android Studio показывается графики, но не производит сэмплирование данных. Для запуска процесса, вам нужно кликнуть на треке CPU, чтобы профайлер переключится на вид CPU. При этом сверху окна появится дропдаун и кнопка ‘Record’.

Выберите Sampled ‘Native’ (В Android Studio 3.3 — C/C++ Native), и нажмите кнопку ‘Record’.
Так как запись производится на диск устройства, по опыту лучше не записывать более 5-8 секунд, многие устройства будут фейлится и на меньшем кол-ве данных (список проверенных устройств смотрите в конце статьи).

Для получения результата нажмите ‘Stop’ и потом красный квадрат, чтобы прервать сессию. Сложно понять задумку авторов, но если вы не остановите запись полностью, то профайлер не всегда начинает анализ полученных данных и ваш отрезок с данным уедет в далёкие дали.

После этого остаётся только немного подождать, через 30-50 секунд профайлер выдаст вам результат. Если всё настроено верно, вы получите capture со всем именами функций

Известные особенности

  • Наиболее стабильные результаты можно получить на root-ованных девайсах
  • Не используйте Samsung-и, на них есть множество защитных наворотов, которые мешают отладке
  • Во множестве мест ваш колстэк будет уходить в функции вида ‘kernel.kptr + адрес’. Это вызовы внутри Android Kernel, которые защищены из-за политики безопасности. На рутованном устройстве защиту можно отключить:
    • Запустите `adb shell`
    • Запустите `su` чтобы получить права root-пользователя
    • Выполните ‘sysctl -w kernel.kptr_restrict=0’ — это снимет защите с kernel-а
    • [!] После окончания отладки, выполните ‘sysctl -w kernel.kptr_restrict=1’. Некоторые устройства иначе при перезагрузке не смогут загрузить OS. Во многих случаях лечится только перепрошивкой чистого ядра.
  • Если Android Studio часто падает, можно попробовать увеличить heap Java VM:
    • 2Gb — для проектов среднего размера (‘-Xmx2g’)
    • 4Gb — для больших проектов (‘-Xmx4g’)
  • На нерутованных устройствах иногда улучшает ситуацию переключение ядра в ‘permissive mode’
    • Выполните команду ‘adb shell setenforce 0’

Unity специфика

  • Главный поток Unity называется UnityMain, но вы можете увидеть множество UnityMain при профилировании. Это пользовательские потоки, которые вы создаете внутри C# кода. По умолчанию они получают такое же имя. Главный поток Unity обычно легко отличить, так как он будет самый нагруженный.
  • Графический поток называется UnityGfxWorkerW
  • Потоки Unity Job системы называются Worker Thread
  • К сожалению некоторые wait-функции, которые применяет Unity (futex-ы), Android Studio показывает и считает не как wait-time, а как активность.
  • Когда вы будете смотреть call graph в Top Down view, вам придётся пройти через множество уровней Java-вызовом, к сожалению отфильтровать в Android Studio это никак нельзя.

Рекомендованные устройства

Мы для экспериментов использовали следующие устройства:

  • Samsung Galaxy S8
  • Google Pixel 2XL
  • Google Pixel
  • Sony Xperia XA1
  • Huawei Honor 7
  • Huawei Nexus 6P
  • Moto G5P
  • Asus Nexus 7 (2013)

Все устройства были зарутованы, для Huawei Nexus 6P мы собрали ядро и AOSP. По результату самыми беспроблемными и простыми для работы оказались Google и Sony. У Sony есть отличный сайт для разработчиков — Open Devices. Huawei больше не позволяет разблокировать устройства лёгким образом, Samsung вызывает постоянные сложности дополнительными уровнями защиты. Moto G5P часто приводил к падению процесса сбора данных профайлера (simpleperf).

Профилируем Unity проект с Android Studio

Требования

Для полноценного профилирования приложения вам потребуется телефон с Android 8 или новее (API 27). По опыту, профилирование с Android-ами более старых версий несёт больше приключений, чем пользы. По этой причине я рекомендую обзавестись полной линейкой Nexus устройств, так как они имеют старое железо и последние обновления Android-а.

Настройка Unity проекта

Для получения результата, вам придётся настроить Unity проект определённым образом.

Настройки в Build Settings

  • В первую очередь, вы должны переключить Build System в “Gradle” и поставить галочку напротив “Export Project”. Таким образом мы получим готовый Android Studio проект, который мы и будем в дальнейшем профилировать. Профилирование готового APK тоже возможна, но более ограничена и требует больше подготовки
  • Режим “Development Build” желательно выключить, так как таким образом получаемые тайминги в профайлере будут максимально близки к реальным

Настройки в Player Settings

  • Установите Scripting Backend в IL2CPP. Если оставить Mono, то при нативном профилировании мы увидим много функций Mono, без информации как они соотносятся с C# кодом.
  • Опция ‘C++ Compiler Configuration’ для Android ни на что не влияет (в Unity 2018.3). Можете поставить её в ‘Release’, возможно в будущих версиях Unity Android toolchain эта настройка будет влиять на настройки компилятора.
  • Желательно ограничить ‘Target Architecture’ до ARMv7. Так вы сэкономите на времени компиляции и по опыту множество архитектур иногда вводит Android Studio в ступор.
  • Также стоит установить ряд дополнительных настроек:
    • Install Location — ‘Prefer external’
    • Internet Access — ‘Require’
    • Write Permission — ‘External (SDCard)’

    Android Studio и другие профайлеры используют simpleperf для сбора статистики, и ему подребуется доступ к карте памяти для записи временных файлов.

Подготовка Gradle проекта

После того, как вы установили все настройки, соберите Unity проект. Вы должны получить папку с Gradle проектом.

Unity по умолчанию собирает проект из расчёта, что вы планируете собирать из него финальный APK. Потому вся отладочная информацию из него удалена, но к счастью её можно вернуть. Для этого вам нужно подменить libil2cpp.so и libunity.so на версии с отладочной информацией.

libil2cpp.so

libunity.so

Это файл, который содержит low-level часть Unity Player. Так как мы делаем Release сборку, то Unity положила вам в проект файл без отладочной информации. Вам нужно подменить libunity.so на файл с символами.

  • Пойдите в папку, где у вас установлена Unity
  • Перейдите в папку «DataPlaybackEnginesAndroidPlayerVariationsil2cppDevelopmentLibsarmeabi-v7a»
  • Возьмите от туда файл libunity.so, и замените файл в вашем проекте, который лежит в папке ‘srcmainjniLibsarmeabi-v7a’

Профилирование

Теперь вы можете начать профилировать в Android Studio, достаточно нажать кнопку запуска профайлера.

Android Studio запустит приложение и начнётся сэссия профилирования

По умолчанию, Android Studio показывается графики, но не производит сэмплирование данных. Для запуска процесса, вам нужно кликнуть на треке CPU, чтобы профайлер переключится на вид CPU. При этом сверху окна появится дропдаун и кнопка ‘Record’.

Выберите Sampled ‘Native’ (В Android Studio 3.3 — C/C++ Native), и нажмите кнопку ‘Record’.
Так как запись производится на диск устройства, по опыту лучше не записывать более 5-8 секунд, многие устройства будут фейлится и на меньшем кол-ве данных (список проверенных устройств смотрите в конце статьи).

Для получения результата нажмите ‘Stop’ и потом красный квадрат, чтобы прервать сессию. Сложно понять задумку авторов, но если вы не остановите запись полностью, то профайлер не всегда начинает анализ полученных данных и ваш отрезок с данным уедет в далёкие дали.

После этого остаётся только немного подождать, через 30-50 секунд профайлер выдаст вам результат. Если всё настроено верно, вы получите capture со всем именами функций

Известные особенности

Unity специфика

  • Главный поток Unity называется UnityMain, но вы можете увидеть множество UnityMain при профилировании. Это пользовательские потоки, которые вы создаете внутри C# кода. По умолчанию они получают такое же имя. Главный поток Unity обычно легко отличить, так как он будет самый нагруженный.
  • Графический поток называется UnityGfxWorkerW
  • Потоки Unity Job системы называются Worker Thread
  • К сожалению некоторые wait-функции, которые применяет Unity (futex-ы), Android Studio показывает и считает не как wait-time, а как активность.
  • Когда вы будете смотреть call graph в Top Down view, вам придётся пройти через множество уровней Java-вызовом, к сожалению отфильтровать в Android Studio это никак нельзя.

Building apps for Android

There are two locations to configure settings that affect how your app is built:

  • Player settings — Allows you to configure runtime settings for the app. For more information on Player settings, see Player settings for the Android platform.
  • Build settings — Allows you to configure build system parameters and build the app.

The output package includes an APK, and an APK expansion file (OBB) if the Split Application Binary option is selected in the Player settings. For more information on OBB files, see OBB Support.

To optimize for download and installation size, enable the Split APKs by target architecture option in the Player settings. The Split APKs by target architecture option produces one set of APKs and OBBs for each device architecture selected in the Target Architecture list in the Player settings. You can upload this set of APKs (and OBBs, if enabled) to the Google Play, or other, store instead of a FAT APK in which all of the selected architectures are included into a single APK. For more information on this feature, see Multiple APK support on the Android Developer website.

Configuring Build Settings

To configure and build apps for Android, access the Build Settings window (File > Build Settings). In Platform, select Android.

To set Android as your default build platform, click the Switch Platform button.

After you specify your build settings, click the Build The process of compiling your Project into a format that is ready to run on a specific platform or platforms. More info
See in Glossary button to create your build. To build the app, click Build And Run to create and run your build on the platform you have specified.

Texture compression

Unity uses the Ericsson Texture Compression (ETC) format for textures that don’t have individual texture format A file format for handling textures during realtime rendering by 3D graphics hardware, such as a graphics card or mobile device. More info
See in Glossary overrides. When building an APK to target specific hardware, use the Texture Compression 3D Graphics hardware requires Textures to be compressed in specialised formats which are optimized for fast Texture sampling. More info
See in Glossary option to override this default behavior. Texture Compression is a global setting for the Project. If a texture has a specific override on it, that texture is not affected by the Texture Compression setting. For additional information, see Textures An image used when rendering a GameObject, Sprite, or UI element. Textures are often applied to the surface of a mesh to give it visual detail. More info
See in Glossary .

For additional information on textures and texture compression, see the Mobile and WebGL specific formats and Notes on Android sections on the Texture compression formats for platform-specific overrides page.

Note: Texture Compression is a global setting. Individual textures override the global setting.

ETC2 fallback

For Android devices that don’t support ETC2 (which don’t support GL ES3), you can override the default ETC2 texture decompression by choosing from 32-bit, 16-bit, or 32-bit with half the resolution formats.

This option allows you to choose between the uncompressed image quality and the amount of memory the uncompressed texture occupies. 32-bit RGBA texture is the highest quality format, and takes twice the required disk space as the 16-bit format, but a texture in 16-bit might lose some valuable color information. 32-bit half-resolution reduces the memory requirement further, but the texture is likely to become blurry.

Build system

Unity supports two Android build systems: Gradle An Android build system that automates several build processes. This automation means that many common build errors are less likely to occur. More info
See in Glossary and Internal.

The steps involved with building for Android are:

Preparing and building the Unity Assets.

Processing the plug-ins A set of code created outside of Unity that creates functionality in Unity. There are two kinds of plug-ins you can use in Unity: Managed plug-ins (managed .NET assemblies created with tools like Visual Studio) and Native plug-ins (platform-specific native code libraries). More info
See in Glossary .

Splitting the resources into the parts that go to the APK and the OBB, if Split Application Binary is selected.

Building the Android resources using the AAPT utility (internal build only.)

Generating the Android manifest.

Merging the library manifests into the Android manifest (internal build only.)

Compiling the Java code into the Dalvik Executable format (DEX) (internal build only.)

Building the IL2CPP A Unity-developed scripting back-end which you can use as an alternative to Mono when building Projects for some platforms. More info
See in Glossary library, if IL2CPP Scripting Backend is selected.

Building and optimizing the APK and OBB packages.

Gradle build system

The Gradle build system uses Gradle to build an APK or export a Project in Gradle format, which can then be imported to Android Studio. When you select this build system, Unity goes through the same steps as the Internal build system excluding resource compilation with AAPT, merging manifests, and running DEX. Unity then generates the build.gradle file (along with the other required configuration files) and invokes the Gradle executable, passing it the task name and the working directory. Finally, the APK is built by Gradle.

Internal build system

The Internal build system creates an APK using the Android SDK utilities to build and optimize the APK and OBB packages. For more information about OBB files, see OBB Support.

Exporting the Project

If you need more control over the build pipeline, or to make changes that Unity does not normally allow (for example, fine tuning the manifest files that are automatically generated by Unity), you can export your Project and import it into Android Studio. Exporting a Project is only available when you have selected Gradle as your Build System.

To export the Project:

  1. From the Build System drop-down menu, select Gradle.
  2. Check the Export Project checkbox. When Export Project is checked, the Build button is relabeled Export and the Build And Run button is disabled.
  3. Click the Export button and select a destination folder for the project.

When the export finishes, open Android Studio and import your project. For more information on importing projects to Android Studio, see the Migrate to Android Studio section of the Android Developer documentation.

Build or Build and Run

The Build Settings window offers two options: Build and Build and Run. Using either option saves the output packages (APK and OBB, if enabled) to the path that you select. You can publish these packages to the Google Play Store, or install them on your device manually with the help of Android Debug Bridge (ADB). For further information about installing apps manually, see the Run your app section of the Android Developer documentation. For information on ADB An Android Debug Bridge (ADB). You can use an ADB to deploy an Android package (APK) manually after building. More info
See in Glossary commands, see the Android Debug Bridge section of the Android Developer documentation.

Selecting Build and Run saves the output packages to the file path you specify, while also installing your app on the Android device connected to your computer.

If the Split Application Binary option is enabled, the OBB file is pushed to the correct location on your device. If Development Build A development build includes debug symbols and enables the Profiler. More info
See in Glossary is checked, Unity also sets up a Profiler tunnel and enables CheckJNI. After that, the app is launched. The Split Application Binary setting is located in the Publishing Settings section of the Player settings.

Tip: Specify the output path for the packages and then use the Ctrl+B (Windows) or Cmd+B (macOS) keyboard shortcut to Build and Run using the saved output path.

2018–11–19 Page amended

Updated functionality in 5.5

Updated the Build Settings Configuration options

Практические советы по использованию профайлера в Unity

Практические советы по использованию профайлера в Unity

  • Переводы , 19 апреля 2019 в 11:09
  • Александр Ланский

Инструмент профилировки Unity профайлер даёт конкретные данные о производительности игры и облегчает процесс её оптимизации. Профайлер предоставляет покадровые показатели, с помощью которых можно легче выявить проблемные места. Он также даёт информацию о производительности игры вне редактора. Имейте в виду, что использование профайлера частично сказывается на производительности. Чтобы увеличить точность показателей производительности, нужно создать билд для необходимой платформы и запустить игру на целевом устройстве. Хотя наилучшую производительность можно получить на неотладочной сборке (Development Build), профайлер Unity может работать только на отладочной сборке.

Чтобы активировать профайлер в приложении, необходимо в окне Build Settings (File→Build Settings) включить параметры Development Build и Autoconnect Profiler. При запуске приложения профайлер будет запускаться автоматически. Подключить профайлер также можно в Profiler Controls через выпадающий список в редакторе.

Профайлер даёт вам информацию о том, сколько времени требуется приложению на рендер каждого кадра, разбивая это на работу процессора, рендер, память, аудио, физику, UI и сеть.

Примечание Не сравнивайте показания профайлеров разных версий Unity. Разные архитектуры профайлеров по-разному отображают показания.

Профилирование в редакторе

Не стоит забывать о некоторых подводных камнях при профилировании приложения в редакторе. Из-за большого количества открытых окон могут проскакивать лаги. Даже рендер в самом редакторе даёт о себе знать. Поэтому крайне важно хоть иногда профилировать приложение на целевом устройстве и не полагаться только на данные из редактора.

Deep Profile

В этом режиме отдельно записываются вызовы каждого метода, обеспечивая чёткое представление дерева методов.

Примечание Начиная с Unity 2017.3, режим deep profile работает не только в редакторе, но и на Android, и на Desktop, с использованием бэкенда Mono.

Для включения этого режима на Desktop используйте аргумент командной строки -deepprofiling .

Для включения этого режима на Android используйте аргумент командной строки adb .

$ adb shell am start -n com.company.game/com.unity3d.player.UnityPlayerActivity -e ‘unity’ ‘-deepprofiling’

Профилирование памяти в редакторе

Профилирование памяти в редакторе полезно для понимания общей модели памяти, но не для фактических показателей конкретных устройств.

  • В процессе выполнения у каждого меша флаг read/write установлен независимо от значения Read/Write Enabled в настройках импорта ассета. Это уже удваивает память мешей, отображаемую в профайлере.
  • Профилирование в редакторе также отключает сжатие вершин (Vertex Compression).
  • В процессе выполнения приложения в редакторе создаётся больше временных данных в памяти. К примеру, GetComponent в случае отсутствия компонента выделяет под него временную память. Поэтому Unity может выбросить исключение в редакторе, но не сделать этого в билде.

Статистика рендера

В Unity есть функция отображения статистики рендера в реальном времени (окно Game). Туда входят fps, батчи draw calls, использование VRAM, количество вершин и треугольников. Для включения слоя статистики необходимо нажать на кнопку Stats на панели окна Game. Эта статистика поможет анализировать батчинг и GPU производительность, основываясь на количестве вызовов отрисовки.

Статистика в окне Game

Для более детальной статистики рендера можно открыть вкладку рендера в профайлере.

Вкладка рендера, показывающая детальную статистику за кадр

На изображении выше видно, что пустая сцена имеет 5 вызовов SetPass и 5 вызовов отрисовки.

  • Количество вызовов SetPass играет важную роль, т. к. оно негативно влияет на производительность. Количество этих вызовов должно быть как можно меньше.
  • Вызовы отрисовки (draw calls) являются менее важным параметром, если ваше приложение не зависит от производительности процессора. Это связано с тем, что вызовы отрисовки выполняются в рендеринговом потоке, который запускается на процессоре. Уменьшить зависимость от производительности процессора можно многопоточным рендерингом.

Вызовы отрисовки

Частые вызовы отрисовки с похожими пайплайнами влияют на производительность лучше, чем редкие с разными пайплайнами. Unity кеширует одинаковые вызовы, что ускоряет процесс отрисовки. Для разных вызовов отрисовки Unity создает разные буферы. Это загружает графическую память.

Многопоточный рендер и Graphics Jobs

Многопоточный рендер и Graphics Jobs (Player Settings) чаще всего положительно сказываются на производительности, но во время отладки и профилирования некоторые показатели могут быть «размытыми». Для более точного профилирования можно посмотреть на оптимизацию графики в Unity.

Кадровый отладчик

Кадровый отладчик позволяет остановить игру на определённом кадре и пройтись по основным событиям. С его помощью можно просмотреть, как Unity выстраивает сцену и продумать возможные способы оптимизации. Отладчик также указывает на те GameObject’ы, рендер которых не обязателен. Отключив эти GameObject’ы, можно уменьшить число вызовов отрисовки на один кадр.

Отладчик не показывает отдельные вызовы отрисовки или разницу между ними. Он показывает процесс построения кадра. Только нативные GPU-профайлеры дадут исчерпывающую информацию о вызовах отрисовки (чаще всего привязанную к времени). Кадровый отладчик может оказаться полезным в отладке пайплайна и батчинга (особенно при работе с Unity UI). Детальная информация описана в документации кадрового отладчика.

Профайлер памяти

В этом проекте демонстрируется использование профайлера памяти. Также по нему есть документация.

Снимок с профайлера памяти

Данный инструмент отслеживает память, выделенную подсистемами Unity, а также пользовательскими скриптами (до версии Unity 2017.3). Профайлер не может отслеживать выделение памяти из сторонних инструментов. Начиная с версии Unity 2017.3 профайлер также поддерживает отслеживание управляемых объектов в среде выполнения Mono scripting.

Подробно профайлер можно изучить в этом видео и документации.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector