При использовании Unity Profiler для профилирования приложения существует три основных способа записи данных:
- Профилируйте свое приложение в проигрывателе на целевой платформе
- Профилируйте свое приложение в режиме воспроизведения в редакторе Unity
- Профиль редактора Unity
Лучший способ получить точное время для вашего приложения – это профилировать его на конечной платформе, на которой вы собираетесь его публиковать. Это дает вам точные данные о том, что влияет на производительность вашего приложения.
Однако создание приложения каждый раз, когда вы хотите улучшить его производительность, может занять много времени. Чтобы быстро оценить производительность вашего приложения, вы можете профилировать его прямо в режиме Play в Редакторе. Профилирование в режиме воспроизведения не дает точного представления о том, как выглядит производительность вашего приложения на реальном устройстве, но это полезный инструмент, позволяющий быстро проверить, улучшают ли внесенные вами изменения производительность вашего приложения после первоначального профилирования на конечная платформа.
Редактор Unity может повлиять на производительность вашего приложения, поскольку он использует те же ресурсы, что и ваше приложение, когда оно работает в режиме воспроизведения, поэтому вы также можете отдельно профилировать редактор, чтобы определить, какие ресурсы он использует. Это особенно полезно, если ваше приложение предназначено для работы только в режиме воспроизведения, например для создания фильмов.
Профилируйте свое приложение на целевой платформе
Чтобы профилировать приложение на целевой платформе выпуска, подключите целевое устройство к сети или напрямую к компьютеру с помощью кабеля. Вы также можете подключиться к устройству через IP-адрес. Вы можете профилировать свое приложение только как разрабатываемую сборку. Чтобы настроить это, перейдите в Настройки сборки (меню: Файл > Настройки сборки) и выберите целевую платформу вашего приложения. Включите параметр Разработка. Когда вы включаете этот параметр, становятся доступными две настройки, связанные с Profiler: Autoconnect Profiler и Поддержка глубокого профилирования.

Если вы включите параметр Автоподключение Profiler, редактор Unity запишет свой IP-адрес во встроенный проигрыватель в процессе сборки. Когда вы запускаете проигрыватель, он пытается подключиться к профилировщику в редакторе, расположенному по запеченному IP-адресу.
Если вы также включите параметр Поддержка глубокого профилирования, Unity будет выполнять глубокое профилирование при запуске встроенного проигрывателя. , что означает, что окно Profiler поможет вам оптимизировать игру. Он показывает, сколько времени вы тратите на различные области вашей игры. Например, он может сообщать о проценте времени, затраченном на рендеринг, анимацию или игровую логику. Подробнее
Смотрите в Словарь каждую часть вашего кода, а не только тайминги кода в явном виде. завернутые в ProfilerMarkers. Это полезно для получения информации Deep Profiling о времени запуска вашего приложения, однако это добавляет небольшие накладные расходы к вашей сборке.
Подключение к проигрывателю в окне Profiler
Если вы не включили параметр Autoconnect Profiler в настройках сборки, вы можете вручную подключиться к платформе, на которой запущено ваше приложение. Пока ваше приложение работает в проигрывателе, этот проигрыватель отображается в раскрывающемся списке Присоединить к проигрывателю окна Profiler. В раскрывающемся списке Присоединить к проигрывателю показаны все проигрыватели Unity, работающие в вашей локальной сети. Вы можете идентифицировать этих проигрывателей по типу проигрывателя и имени хоста, на котором работает проигрыватель (например, «iPhonePlayer (Toms iPhone)»).
Вы также можете подключиться к игроку напрямую через его IP-адрес. Для этого выберите меню Прикрепить к проигрывателю, а затем в раскрывающемся списке выберите <Введите IP>. Появится диалоговое окно, в котором вы можете ввести IP-адрес и (необязательно) порт проигрывателя, к которому вы хотите подключиться.

Чтобы начать сбор информации о профилировании вашего приложения, выберите проигрыватель в раскрывающемся меню и нажмите Записать. Для непрерывного сбора данных во время работы приложения включите параметр Запускать в фоновом режиме в настройках проигрывателя (меню: Правка > Настройки проекта > Плеер > Разрешение и представление). Когда вы включаете этот параметр, Profiler собирает данные, даже если вы оставляете свое приложение работающим в фоновом режиме. Если вы отключите его, профилировщик будет собирать данные только тогда, когда приложение работает в активном окне.
Руководство по профилированию для конкретных платформ
Разные платформы ведут себя по-разному, когда вы подключаете их к Unity Profiler. В следующих разделах приводятся рекомендации по некоторым общим функциям, характерным для каждой платформы:
WebGL
Вы можете использовать Unity Profiler в WebGL, но вы не можете подключиться к работающему проигрывателю, созданному с помощью WebGL, через редактор. Это связано с тем, что WebGL использует для связи WebSockets, что не позволяет входящие соединения на стороне браузера. Чтобы подключиться к работающему проигрывателю, необходимо установить флажок Автоподключение профилировщика в Настройки сборки (меню: Файл > Настройки сборки). Unity не может профилировать вызовы отрисовки для WebGL.
Профилирование на мобильных устройствах
Обе iOSмобильная операционная система Apple. Подробнее
См. в Словарь, а устройства Android поддерживают удаленное профилирование по сети. Если вы используете брандмауэр, откройте порты с 54998 по 55511 в исходящих правилах брандмауэра. Это порты, которые Unity использует для удаленного профилирования.
Иногда при настройке удаленного профилирования Редактор Unity может не подключаться к устройству автоматически. В этом случае вы можете инициировать подключение Profiler вручную. Для этого выберите раскрывающееся меню Присоединить к проигрывателю в окне Профилировщика и выберите соответствующее устройство.
Вы также можете подключить целевое устройство напрямую к компьютеру, чтобы избежать проблем с сетью или подключением.
Удаленное профилирование iOS
Чтобы включить удаленное профилирование на устройствах iOS, выполните следующие действия:
- Подключите устройство iOS к сети Wi-Fi. Profiler использует локальную сеть Wi-Fi для отправки данных профилирования с вашего устройства в редактор Unity.
- Подключите устройство к компьютеру с помощью кабеля. Перейдите к настройкам сборки (меню: Файл > Настройки сборки), установите флажки Разработка сборки и Профилировщик автоподключения. , затем выберите Сборка и запуск.
- Когда приложение запустится на устройстве, откройте окно Profiler в редакторе Unity (меню: Окно > Анализ > Profiler).
Удаленное профилирование Android
Устройства Android поддерживают два метода удаленного профилирования: через WiFi или через Android Debug Bridge (adb ).
Для профилирования Wi-Fi выполните следующие действия:
- Отключите мобильные данные на устройстве Android.
- Подключите устройство Android к сети Wi-Fi. Profiler использует локальную сеть Wi-Fi для отправки данных профилирования с вашего устройства в редактор Unity.
- Подключите устройство к компьютеру с помощью кабеля. Перейдите к настройкам сборки (меню: Файл > Настройки сборки), установите флажки Разработка сборки и Профилировщик автоподключения. , затем выберите Сборка и запуск.
- Когда приложение запустится на устройстве, откройте окно Profiler в редакторе Unity (меню: Окно > Анализ > Profiler).
Примечание. Устройство Android и хост-компьютер, на котором запущен редактор Unity, должны находиться в одной подсети, чтобы определение устройства работало.
Для профилирования Android Debug Bridge (adb) выполните следующие действия:
- Убедитесь, что устройство находится в режиме разработки и включите параметр Отладка USB .
- Подключите устройство к компьютеру с помощью кабеля и убедитесь, что оно отображается в adbмосте отладки Android (ADB) . Вы можете использовать ADB для развертывания пакета Android (APK) вручную после сборки. Подробнее
См. в Словарь. - Перейдите к настройкам сборки (меню: Файл > Настройки сборки), установите флажок Разработка сборки, а затем выберите Собери и запусти.
- Когда приложение запустится на устройстве, откройте окно Profiler в редакторе Unity (меню: Окно > Анализ > Profiler).
- В раскрывающемся меню Прикрепить к проигрывателю выберите AndroidProfiler(ADB@127.0.0.1:34999). Запись в раскрывающемся меню отображается только в том случае, если выбрана цель Android.
Редактор Unity автоматически создает туннель adb для вашего приложения, когда вы выбираете Build & Run. Если вы хотите профилировать другое приложение или перезапустить сервер adb, вам необходимо настроить этот туннель вручную. Для этого откройте окно терминала или командную строку и введите следующее:
-
Требуется, когда соединение Editor-to-Android установлено через USB-кабель
adb forward tcp:34999 localabstract:Unity-{вставьте здесь идентификатор пакета}
-
Необходимо, если соединение Android-Editor установлено через USB-кабель
обратный TCP:34998 TCP:34999
Чтобы использовать Deep Profiling со сборкой Android, необходимо включить параметр Mono Scripting Backend в Настройках проигрывателя Android (меню: Редактировать > Настройки проекта > Игрок > Android > Другие настройки) и введите следующее, чтобы запустить игру через команда adb:
~$ adb shell am start -n {insert bundle identifier here}/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'
Удаленное профилирование Android Chrome OS
Unity не может автоматически обнаруживать устройства Chrome OS. Чтобы инициировать подключение, подключитесь к устройству через Android Debug Bridge (adb) по его IP-адресу, а затем выберите
в разделе Подключить к проигрывателю раскрывающееся меню и введите IP-адрес устройства. После подключения вы можете профилировать свое приложение как обычно.
Профилирование в редакторе Unity
Когда вы используете окно Profiler для запуска и профилирования вашего приложения в редакторе, результаты являются лишь приблизительным представлением поведения вашего приложения, когда оно запускается на целевой платформе. Это связано с тем, что режим воспроизведения работает в том же процессе, что и редактор, поэтому вы не можете полностью изолировать использование процессора, графического процессора и памяти вашего приложения от использования редактора Unity. Это искажает полученные данные профилирования.
Чтобы получить лучшие результаты профилирования, вы всегда должны профилировать свое приложение на целевом устройстве и профилировать только в редакторе, чтобы быстро перебирать проблемы, которые вы уже определили на устройстве.
Вы также можете профилировать в режиме воспроизведения или профилировать редактор, чтобы выявить проблемы, не связанные с производительностью вашего приложения, например, замедляет ли время итерации длительное время загрузки или неотвечающий редактор, или если ваше приложение плохо работает в режиме воспроизведения.
Каждый раз, когда вы профилируете в редакторе, убедитесь, что вы открываете режим воспроизведения в развернутом виде и уменьшаете количество открытых окон редактора. Это гарантирует, что другие окна редактора не используют время потока рендеринга и графического процессора и, следовательно, не влияют на данные о производительности. Когда режим воспроизведения находится в развернутом виде, ваше приложение запускается с разрешением, более близким к разрешению вашего целевого устройства, что напрямую влияет на проблемы с производительностью, например связанные с скоростью заполнения.
Профилирование в режиме воспроизведения
Целью профилировщика по умолчанию является режим воспроизведения, который записывает действия, когда редактор работает в режиме воспроизведения. Профилирование в режиме воспроизведения полезно для проверки быстрых изменений без пересборки проигрывателя, но его не следует использовать в качестве замены для проверки сборок на целевой платформе и устройствах вашего приложения. Это связано с тем, что режим воспроизведения работает в том же приложении и в том же основном потоке, что и редактор, а это означает, что при профилировании в режиме воспроизведения системы редактора, такие как UI(User Interface) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь, ИнспекторыОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Подробнее
См. в Словарь, СценаСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь Просмотр рендерингПроцесс вывода графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь, и управление активами влияет на показатели производительности и профилирования памяти вашего приложение.
Для эффективного профилирования в режиме воспроизведения вам следует регулярно создавать сборки своего приложения и развертывать их на ряде целевых устройств (как с высокими, так и с низкими характеристиками), а также тестировать и профилировать свое приложение на этих устройствах. Если вы обнаружите проблемы с производительностью вашего приложения на этих устройствах, сузьте область, которая требует наибольшего внимания.
Затем вы можете профилировать свое приложение в режиме воспроизведения и быстро повторять любые изменения, которые вы вносите в свое приложение. Вы можете использовать информацию, полученную при профилировании вашего приложения на целевых устройствах, чтобы определить, есть ли подобное поведение после профилирования вашего приложения в режиме воспроизведения. Затем вы можете снова внести изменения в свое приложение и профиль в режиме воспроизведения, чтобы быстро увидеть результаты ваших изменений. Когда вы будете удовлетворены внесенными изменениями, снова создайте и разверните приложение на целевых устройствах, чтобы проверить изменения.
Примеры PlayerLoop и EditorLoop
Чтобы уменьшить количество шумов и вводящих в заблуждение измерений в данных профилирования, которые редактор создает во время работы в режиме воспроизведения, модули CPU и GPU Profiler разделяют свои тайминги на те, которые происходят в PlayerLoop, и те, которые которые происходят в EditorLoop. Unity присваивает выборки профилировщиканабор данных, связанных с маркером профилировщика, которые профайлер записал и собрал.
См. в Словарь этих типов с Маркеры PlayerLoop и EditorLoop.
Когда Profiler выбирает режим воспроизведения, он собирает только выборки времени, которые произошли внутри PlayerLoop.
Unity классифицирует все образцы EditorLoop как Другие в диаграммах модуля CPU Profiler. В результате образцы EditorLoop вносят наибольший вклад в эту категорию. Если вы хотите увидеть, что редактор делает в это время, а также получить более подробную информацию о том, что еще вносит свой вклад в категорию Другие, вместо этого измените цель профилировщика на редактор.
Важно! Если вы используете Глубокое профилирование и нацеливаете режим воспроизведения, это влияет на производительность каждого вызова функции. как в PlayerLoop, так и в EditorLoop. Это связано с тем, что Deep Profiling перехватывает начало и конец любого вызова метода сценария при перезагрузке домена и не определяет, какие части никогда не вызываются из PlayerLoop. Вызовы методов, происходящие в цикле EditorLoop, не несут всех накладных расходов, связанных с созданием сэмпла, но они все же проверяют, должны ли они выдавать его, что вызывает меньшие, но все же существующие накладные расходы.
Профилирование редактора
Когда вы меняете цель Profiler на Editor, все образцы, которые ранее были скрыты под маркером EditorLoop, добавляются в соответствующие категории. Это означает, что информация на панели сведений модуля CPU Profiler и в его диаграммах существенно меняется.
Чтобы профилировать время запуска редактора, запустите редактор с параметром командной строки -profiler-enable
.
Чтобы уменьшить влияние окна Profiler на производительность редактора, вы можете использовать автономный Profiler, который открывает окно Profiler в своем собственном процессе. Это особенно полезно, если вы выбираете редактор в качестве цели профилирования или выполняете глубокое профилирование своего приложения, поскольку само окно профилировщика обычно использует ресурсы, которые могут исказить производительность. данные.
Рекомендации по профилированию вашего приложения
При профилировании своего приложения вы можете сделать несколько вещей, чтобы обеспечить согласованность между сеансами профилирования и убедиться, что процессы, которые использует Unity, не влияют на ваши данные профилирования:
- Добавляйте в окно Profiler только модули Profiler, относящиеся к области, которую вы хотите исследовать. Чтобы добавить или удалить модули в Profiler, выберите раскрывающийся список в левом верхнем углу окна Profiler.
- Избегайте использования глубокого профилирования, так как при его использовании возникают большие накладные расходы. Если вы хотите просмотреть дополнительные сведения о примерах с такими маркерами, как GC.Alloc или JobFence.Complete, перейдите в окно Profiler на панель инструментов Ряд кнопок и основных элементов управления в верхней части редактора Unity, который позволяет вам взаимодействовать с редактором различными способами (например, масштабирование, перевод). Подробнее
Посмотрите в Словарь и включите Настройка стеков вызовов. Это обеспечивает полный стек вызовов примера, который дает вам необходимую информацию, не неся накладные расходы на глубокое профилирование. - Отключите параметр «В режиме реального времени», если вам не нужно видеть обновление представления «Иерархия» или «Временная шкала» по мере сбора данных профилировщиком. Остановите запись, чтобы увидеть обновление данных в окне.
- Используйте сочетание клавиш F9, чтобы включить или отключить профилировщик. Вы можете использовать этот ярлык для сбора данных о производительности без открытия окна Profiler. Если у вас открыт автономный профилировщик, использование этого ярлыка запускает запись в этом окне.
- Добавлена поддержка глубокого профилирования в 2019.3