Использование ЦП ПрофилировщикОкно, помогающее оптимизировать игру. Он показывает, сколько времени вы тратите на различные области вашей игры. Например, он может сообщать о проценте времени, затраченном на рендеринг, анимацию или игровую логику. Дополнительная информация
Модуль See in Словарь содержит диаграмму, отображающую время тратится в вашем приложении. Он предоставляет обзор всех важных областей, в которых ваше приложение тратит время, таких как рендерингпроцесс вывода графики на экран. (или к текстуре рендера). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь, его скриптыКусок кода, который позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. . Подробнее
См. в Словарь и анимацию. Этот раздел документации охватывает:
- Категории диаграмм
- Панель сведений о модуле
- Временная шкала
- Представление "Иерархия" и "Исходная иерархия"
- Распределение стеков вызовов
- Общие маркеры
Категории диаграммы
Диаграмма модуля CPU Usage Profiler отслеживает время, затраченное на основной поток приложения. Тайминги разделены на девять категорий. Чтобы изменить порядок категорий на диаграмме, вы можете перетащить их в легенду диаграммы. Вы также можете щелкнуть цветную легенду категории, чтобы переключить ее отображение.
Категория | Описание |
---|---|
Rendering | Сколько времени ваше приложение тратит на рендеринг графики. |
Scripts | Сколько времени ваше приложение тратит на выполнение скриптов. |
Physics | Сколько времени ваше приложение тратит на физический движокСистема, которая имитирует аспекты физических систем, чтобы объекты могли правильно ускоряться и подвергаться воздействию столкновениями, гравитацией и другими силами. Подробнее См. в Словарь. |
Animation | Сколько времени ваше приложение тратит на анимацию Skinned Meshосновного графического примитива Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее См. в Словарь Рендереры, GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее См. в Словарь и других компонентах вашего приложения. Это также включает время, затрачиваемое на расчеты для систем, в которых используется компонент Animation и Animatorкомпонент модели, который анимирует эту модель с помощью компонента Animation. система. Компонент имеет ссылку на ресурс Animator Controller, который управляет анимацией. Подробнее См. в Словарь. |
GarbageCollector | Сколько времени ваше приложение тратит на запуск сборщика мусора. |
VSyncВертикальная синхронизация (VSync) — это параметр дисплея, который ограничивает частоту кадров в игре, чтобы она соответствовала частоте обновления монитора, чтобы предотвратить разрыв изображения. See in Словарь |
Сколько времени ваше приложение тратит на кадр в ожидании targetFrameRate или следующего VBlank Интервал вертикального гашения (VBlank) — это время между концом последней видимой строки кадра и началом первой видимой строки следующего кадра. Это интервал обновления, определяемый частотой обновления экрана. См. в Словарь для синхронизации. Это зависит от значения QualitySettings.vSyncCount, целевой частоты кадров или параметра VSync, который является максимальным значением по умолчанию или обязательным для платформы, на которой работает ваше приложение. работает на. Дополнительные сведения о VSync см. в разделе этой документации, посвященном примерам рендеринга и VSync. |
Global IlluminationГруппа методов, которые моделируют как прямое, так и непрямое освещение для получения реалистичных результатов освещения. В Unity есть две системы глобального освещения, сочетающие прямое и непрямое освещение: запеченное глобальное освещение и глобальное освещение в реальном времени. See in Словарь |
How much time your application spends on lighting. |
UI(Пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением.More info See in Словарь |
Сколько времени ваше приложение тратит на отображение пользовательского интерфейса. |
Others | Сколько времени ваше приложение тратит на код, который не попадает ни в одну из других категорий. Это включает в себя такие области, как весь цикл EditorLoop или накладные расходы на профилирование при профилировании режима воспроизведения в редакторе. |
Панель сведений о модуле
При выборе модуля «Загрузка ЦП» на панели сведений под ним отображается разбивка того, где приложение провело время в выбранном кадре. Вы можете отображать временные данные либо в виде временной шкалы, либо в виде иерархической таблицы. Чтобы изменить отображение, используйте раскрывающийся список в левом верхнем углу панели сведений (по умолчанию установлено значение Временная шкала). Доступны три представления:
Вид | Функция |
---|---|
Timeline | Отображает разбивку таймингов для определенного кадра вместе с временной осью длины кадра. Это единственный режим просмотра, который можно использовать для просмотра временных характеристик всех потоков одновременно и в те моменты времени внутри кадра, в которых они произошли, чтобы можно было сопоставить временные интервалы между потоками (например, Рабочие потоки Job System запускаются после того, как система основного потока запланировала их). |
Hierarchy | Группирует временные данные по внутренней иерархической структуре. Эта опция отображает элементы, которые вызвало ваше приложение, в формате нисходящего списка, упорядоченного по затраченному времени по умолчанию. Вы также можете упорядочить информацию по объему выделенной памяти для сценариев (GC Alloc) или количеству вызовов. Чтобы изменить столбец, который упорядочивает таблицу, щелкните заголовок столбца таблицы. |
Raw Hierarchy | Отображает данные синхронизации в иерархической структуре, аналогичной стекам вызовов, в которых происходила синхронизация. В этом режиме Unity перечисляет каждый стек вызовов отдельно, а не объединяет их, как в представлении Hierarchy. |
Живые настройки
Настройка Живое, доступная в каждом из представлений, отображает информацию о текущем или выбранном кадре на панели сведений о модуле, когда вы начинаете запись новых данных в режиме воспроизведения или редакторе. Чтобы включить это, нажмите кнопку Включить рядом с раскрывающимся списком сведений о модуле. По умолчанию этот параметр отключен, и панель сведений о модуле остается пустой при записи данных. Примечание. Этот параметр увеличивает нагрузку на EditorLoop
при перерисовке окна Profiler.
Показать полные имена методов сценариев
Кроме того, в каждом представлении можно выбрать меню Дополнительные элементы (⋮) и включить параметр Показать полные имена методов сценариев, после чего будут отображаться полные имена для всех методы сценариев (Assembly::Class::MethodName
).
Вид Timeline
Представление Временная шкала — это представление по умолчанию для модуля «Профилировщик загрузки ЦП». Он содержит обзор того, на что тратится время в вашем приложении и как эти тайминги соотносятся друг с другом.
В представлении «Временная шкала» отображаются данные профилирования из всех цепочек в их собственных подразделах и вдоль одной оси времени, в отличие от представлений «Иерархия». Представления Hierarchy отображают данные профилирования только по одному потоку за раз, по умолчанию это основной поток. Кроме того, в этих представлениях отображается только продолжительность выборки, а в представлении «Временная шкала» показано время появления каждой выборки.
Вы можете использовать представление временной шкалы, чтобы увидеть, как действия в разных потоках коррелируют друг с другом при их параллельном выполнении. Вы можете видеть, насколько много или мало вы используете различные потоки, такие как рабочие потоки Системы заданий, как работа над потоками ставится в очередь, и если какой-либо поток бездействие (пример простоя) или ожидание завершения другого потока или задания (подождите x образец).
Навигация и выбор элементов
Чтобы увеличить области временной оси, используйте колесо прокрутки мыши или нажмите и удерживайте клавишу Alt при перетаскивании с нажатой правой кнопкой мыши. Вы также можете использовать концы горизонтальной полосы прокрутки для увеличения масштаба. Нажмите клавишу A на клавиатуре, чтобы сбросить масштаб, чтобы было видно все время кадра.
Всякий раз, когда вы видите белую стрелку в нижней части обсуждения, вы можете щелкнуть ее, чтобы развернуть обсуждение и показать все строки, или щелкнуть еще раз, чтобы отобразить только верхние. Вы также можете перетащить линию, разделяющую потоки, чтобы изменить количество видимых линий. Двойной щелчок по строке устанавливает высоту раздела потока на максимальную глубину стека вызовов. Чтобы панорамировать вид, нажмите среднюю кнопку мыши или, удерживая клавишу Alt (клавиша Command в macOS), нажмите левую кнопку мыши.
Чтобы свернуть или развернуть группы тем, нажимайте на раскрывающиеся стрелки рядом с названиями тем в крайнем левом углу экрана.
Чтобы увидеть вклад элемента в диаграмму ЦП, выберите его на нижней панели. Профилировщик выделяет свой вклад и затемняет остальную часть диаграммы. Чтобы отменить выбор элемента, щелкните в другом месте представления. Нажмите клавишу F, чтобы сфокусироваться на текущем выбранном образце или чтобы отобразить уровень масштабирования по умолчанию, если вы ничего не выбрали.
На изображении выше всплывающая подсказка для выбранного элемента содержит дополнительные сведения, такие как количество экземпляров и общее время этого образца во всех потоках. Образцы GC.Alloc окрашены в красно-пурпурный цвет и показывают размер выделения.
Чтобы отобразить управляемые стеки вызовов во всплывающей подсказке, перейдите к панели инструментовокна Profiler с кнопками и основными элементами управления на в верхней части редактора Unity, который позволяет вам взаимодействовать с редактором различными способами (например, масштабирование, перевод). Подробнее
См. Словарь и нажмите кнопку "Стеки вызовов". Это свойство необходимо включить перед профилированием кадра, чтобы отобразить стек вызовов для кадра. Дополнительную информацию см. в разделе стеки вызовов.
События потока
Чтобы наглядно представить, как Unity распределяет задания по потокам, можно использовать параметр События потока. Этот параметр отображает взаимосвязь между системами, заданиями и потоками. Чтобы включить этот параметр, выберите меню Дополнительно (⋮) в правом верхнем углу панели просмотра временной шкалы, а затем выберите Показать события потока.
При включении этого параметра профилировщик добавляет белые маркеры событий к образцам профилировщиканабору данных, связанных с профилировщиком маркер, который профилировщик записал и собрал.
Просмотрите Словарь, которые планируют задания, или дождитесь завершения запланированных заданий. Он также затемняет несвязанные сэмплы, чтобы вам было легче визуализировать выбранный семпл.
Профилировщик добавляет в образцы три типа стрелок:
- Стрелка вниз: указывает на начало потока и на то, что в этом образце запланирована некоторая работа.
- Стрелка вправо: указывает на следующий элемент в потоке и на то, что он запланирован другим образцом.
- Стрелка вверх: указывает на конец потока и завершение или синхронизацию работы с этим образцом.
Когда вы выбираете образец, Profiler соединяет соответствующие маркеры событий потока линиями. Более толстая линия выделяет конкретную выбранную вами линию потока. Например, если образец begin
указывает на два других образца next
, при нажатии одного из следующий
образец, профилировщик рисует к нему более толстую линию.
Это представление полезно для обнаружения потока выполнения вашего кода, того, какие работы ожидают завершения, а также помогает выявить зависимости
Посмотрите в Словарь своего кода в визуальной форме.
Представление "Иерархия" и "Исходная иерархия"
Когда вы переключаетесь на представление Иерархия или Необработанная иерархия, ваш выбор сохраняется до тех пор, пока образец находится в основном потоке. Если вы не можете сразу найти свой выбор, нажмите клавишу F, чтобы сфокусировать его.
В представлении Иерархия перечислены все образцы, которые вы профилировали, и сгруппированы вместе по их общему стеку вызовов и иерархии ProfilerMarkers. Представление Необработанная иерархия не группирует образцы вместе, что делает его идеальным для просмотра образцов на детальном уровне. Вы также можете использовать раскрывающийся список Поток, чтобы выбрать конкретный поток, например основной поток или поток рендеринга, для проверки в этих представлениях.
По умолчанию в этих представлениях свернуты все образцы EditorOnly. Образцы EditorOnly — это образцы в Player Loop, которые происходят только из-за проверок безопасности только для редактора. Когда образцы свернуты, их значение GC.Alloc не влияет на значение GC.Alloc окружающего их образца. Чтобы отобразить эти образцы, выберите меню Дополнительные элементы (⋮) в правом верхнем углу области сведений, а затем отключите параметр Свернуть образцы только в редакторе. Дополнительную информацию см. в разделе Примеры только для редактора этой документации.
В обоих представлениях отображается следующая подробная информация для каждого элемента в иерархии рядом с каждой строкой:
Свойства | Функция |
---|---|
Total | Общее количество времени, которое Unity тратит на конкретную функцию, в процентах.. |
Self | Общее количество времени, которое Unity тратит на конкретную функцию, в процентах, исключая время, которое Unity тратит на вызов подфункций. Например, на снимке экрана 16,7 % времени тратится на функцию Camera.Render . Это потому, что он вызывает множество функций рисования и отбраковки. Однако при исключении вызываемых ею функций только 0,2 % времени тратится на саму функцию Camera.Render . |
Calls | Количество вызовов этой функции в данном кадре. В представлении Необработанная иерархия значения в этом столбце всегда равны 1, поскольку профилировщик не объединяет иерархию выборок. |
GC Alloc | Сколько памяти кучи сценариев Unity выделила в текущем кадре. сборщик мусора управляет памятью кучи сценариев. Всякий раз, когда Unity вызывает GC.Collect() или происходит выделение кучи сценария, которое не соответствует текущему размеру кучи, срабатывает сборщик мусора. Он помечает все выделения, на которые больше нет ссылок, и собирает их. Этот процесс отображается в виде образцов GC.Collect в Profiler. Unity запускает сборщик мусора чаще, поскольку ваше приложение выделяет больше памяти в куче. По мере роста управляемой кучи Unity требуется больше времени для маркировки и сбора памяти. Таким образом, вы должны сохранять значение GC Alloc равным нулю во время работы вашего приложения, чтобы сборщик мусора не влиял на частоту кадров вашего приложения и чтобы общий размер кучи оставался небольшим. Дополнительные сведения об управляемой куче см. в документации по Общие сведения об автоматическом управлении памятью. |
Time ms | Общее время, затраченное Unity на определенную функцию, в миллисекундах. Если ваше приложение использует систему заданий или многопоточную визуализацию, эта информация может ввести в заблуждение, поскольку она содержит только время, затраченное Unity на текущий выбранный поток. Чтобы изменить цепочку, выберите раскрывающийся список Поток в верхней части панели "Иерархия". |
Self ms | Общее количество времени, затраченное Unity на конкретную функцию, в миллисекундах, исключая время, которое Unity тратит на вызов подфункций. |
Warning | Обозначается значком предупреждения и показывает, сколько раз приложение вызывало предупреждение в течение текущего кадра. Дополнительные сведения см. в разделе Предупреждения о производительности этой документации. |
Чтобы получить дополнительную информацию о том, где ваше приложение вызывает и использует профилированные функции, выберите раскрывающийся список Подробности в верхнем правом углу панели сведений о модуле и выберите либо Связанные данные, либо Представление Звонки.
В представлении Связанные данные отображается список UnityEngine.Objects
, которые используют Begin() перегружены и связаны с образцом Profiler. Некоторые образцы, о которых сообщает Unity, имеют встроенные ассоциации, например КамераКомпонент, который создает изображение определенной точки обзора в вашей сцене. . Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
См. в Словарь. Образцы рендеринга, связанные с игровым объектом Camera, выполняющим рендеринг. Unity сообщает об этих объектах через их идентификатор экземпляра и разрешает им имя в окне Profiler, если вы профилируете в редакторе. Когда вы профилируете встроенный проигрыватель или загружаете запись с диска, эти имена не отображаются, и профилировщик отображает их как Н/Д
.
Когда вы нажимаете на один из этих объектов, Unity пытается найти объект через СценуСцена содержит среды и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь иерархию и пинговать его. Поскольку в ассоциации используется идентификатор экземпляра, проверка связи работает только при профилировании приложения в редакторе и до тех пор, пока объект все еще существует.
Для образцов GC.Alloc
в этом представлении отображается список элементов Н/Д
, по одному для каждого произошедшего выделения. на этом уровне иерархии с размером выделения, указанным в столбце GC.Alloc. Если вы профилируете свое приложение с помощью стеков вызововсписка методов, которые вызывались во время выполнения, стек первого выхода.
Параметр Просмотр в Словарь включен при выборе GC.Alloc
в этом представлении окно Profiler отображает стек вызовов для выбранного вами выделенного объекта сценария, даже если вы не включили параметр Deep Profiling. Дополнительные сведения см. в разделе Стеки вызовов выделения этой документации.
В представлении Показать вызовы отображается, откуда вызывается выбранный образец, а также какие другие функции он вызывает.
Стеки вызовов
ProfilerMarker создает набор образцов, которые профилировщик использует для отображения и организации информации профилирования в различных хронологических и иерархических представлениях. Таким образом, любой образец, отображаемый в окне Profiler, является частью стека образцов.
Стек образцов отличается от стека вызовов методов, поскольку Unity не связывает каждый образец с конкретным методом и не записывает каждый вызов как образец. Глубокое профилирование добавляет ProfilerMarker к каждому вызову функции, но не добавляет его для нативного кода, а запись всех этих примеров сопряжена с потенциально большими накладными расходами.
Вы можете включить полные стеки вызовов для образцов, которые выдают GC.Alloc, UnsafeUtility.Malloc, JobHandle.Complete. Это полезно, если вы хотите отследить, где произошли эти выборки, не включая глубокое профилирование и не сталкиваясь с его высокими накладными расходами. Дополнительные сведения об этих маркерах см. в документации по общим маркерам Profiler.
Для этого перейдите на панель инструментов окна Profiler и включите кнопку Call Stacks. По умолчанию это включает стеки вызовов для образцов GC.Alloc. Чтобы включить другие стеки вызовов, выберите стрелку раскрывающегося списка и включите любые другие маркеры, для которых вы хотите видеть стеки вызовов.
Эту функцию можно использовать как в редакторе, так и в запущенном проигрывателе. Это вступит в силу только для тех кадров, которые вы профилируете после включения этой опции.
Например, каждое выделение кучи сценариев отображается как образец GC.Alloc как в представлении Иерархия, так и в представлении Временная шкала. На временной шкале он окрашен в ярко-пурпурный цвет. Чтобы просмотреть стек вызовов, выберите модуль CPU Profiler, а затем выберите образец GC.Alloc в представлении временной шкалы. Примечание. Информация о стеке вызовов не содержит точный номер строки внутри этого метода, а только строку в начале этого метода.
Чтобы просмотреть полную информацию о стеке вызовов, находясь в представлении "Иерархия" или "Необработанная иерархия", установите для представления Подробности значение Связанные данные. В этом представлении перечислены метаданные, связанные с этим образцом, которые могут включать объект UnityEngine.Object, с которым он был связан. Имя любой записи метаданных, не связанной с UnityEngine.Object, отображается на этой панели как N/A. Когда вы выбираете запись N/A, Profiler отображает метаданные, включая стек вызовов, в нижней половине представления сведений.
Дополнительную информацию об управляемом распределении см. в документации по Общие сведения об автоматическом управлении памятью.
Общие маркеры
Код Unity оснащен большим количеством маркеров Profilerпомещенных в код для описания события процессора или графического процессора, которое затем отображается в окне Unity Profiler. Добавляется в код Unity по умолчанию, или вы можете использовать Подробнее
См. Словарь, который поможет понять, что занимает время в вашем приложении. Полный список наиболее распространенных маркеров, которые вы можете встретить в данных профилирования, см. в документации по общим маркерам Profiler.