• Игры
  • Отрасль
  • Ресурсы
  • Сообщество
  • Обучение
  • Поддержка
Услуги разработчиков
Движок Unity
Создавайте 2D и 3D игры для любой платформы
ЗагрузитьТарифы и цены
Монетизация
Встроенная покупка (IAP)
Откройте и управляйте IAP в разных магазинах
Mediation
Максимизируйте доход и оптимизируйте монетизацию
Качество рекламы
Защитите пользовательский опыт вашего приложения
Tapjoy
Создавайте долгосрочную лояльность пользователей
Все продукты монетизации
Привлечение пользователей
Привлечение пользователей
Будьте замечены и привлекайте мобильных пользователей
Unity Vector AI
Соединяйте игроков с подходящими играми
Aura - реклама на устройстве
Достигайте пользователей на устройстве в пиковые моменты вовлеченности
Все продукты для роста
Примеры использования
3D сотрудничество
Создавайте и просматривайте 3D проекты в реальном времени
Иммерсивное обучение
Обучение в иммерсивных средах
Пользовательские опыты
Создавайте интерактивные 3D опыты
Все отраслевые решения
Отрасли
Производство
Достигнуть операционного совершенства
Торговля
Преобразовать опыт в магазине в онлайн-опыт
Автомобильная отрасль
Повысить инновации и опыт в автомобиле
Все отрасли
Техническая библиотека
Документация
Официальные руководства пользователя и ссылки на API
Инструменты для разработчиков
Версии релизов и трекер проблем
План развития
Обзор предстоящих функций
Глоссарий
Библиотека технических терминов
Дополнительная информация
Истории успеха
Истории успеха из реальной жизни
Руководства по лучшим практикам
Советы и хитрости от экспертов
Все ресурсы
Что нового
Блог
Обновления, информация и технические советы
Новости
Новости, истории и пресс-центр
Сообщество
Обсуждения
Обсуждать, решать проблемы и соединяться
События
Глобальные и местные события
Истории сообщества
Made with Unity
Показ Unity-креаторов
Прямые трансляции
Присоединяйтесь к разработчикам, креаторам и инсайдерам
Награды Unity
Празднование Unity-креаторов по всему миру
Для каждого уровня
Unity Learn
Освойте навыки Unity бесплатно
Профессиональное обучение
Повышайте уровень своей команды с тренерами Unity
Не использовали Unity раньше
С чего начать
Приступите к обучению
Основные пути Unity
Не использовали Unity раньше? Начните свое путешествие
Практические руководства
Практические советы и лучшие практики
Образование
Для студентов
Запустите свою карьеру
Для преподавателей
Улучшите свое преподавание
Лицензия Education Grant
Принесите мощь Unity в ваше учебное заведение
Программы сертификации
Докажите свое мастерство в Unity
Варианты поддержки
Получить помощь
Помогаем вам добиться успеха с Unity
Планы успеха
Достигайте своих целей быстрее с помощью экспертов
FAQ
Ответы на часто задаваемые вопросы
Связаться с нами
Свяжитесь с нашей командой
Тарифы и цены
Язык
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
Соцсети
Валюта
Купить
  • Продукты
  • Unity Ads
  • Подписка
  • Unity Asset Store
  • Торговые посредники
Образование
  • Студенты
  • Преподаватели
  • Образовательные учреждения
  • Сертификация
  • Learn
  • Программа развития навыков
Загрузить
  • Unity Hub
  • Архив загрузок
  • Программа бета-тестирования
Unity Labs
  • Лаборатории
  • Публикации
Ресурсы
  • Платформа обучения
  • Сообщество
  • Документация
  • Unity QA
  • FAQ
  • Статус услуг
  • Истории успеха
  • Made with Unity
Unity
  • Наша компания
  • Новостная рассылка
  • Блог
  • События
  • Вакансии
  • Справка
  • Пресса
  • Партнеры
  • Инвесторы
  • Партнеры
  • Безопасность
  • Отдел Social Impact
  • Инклюзия и разнообразие
  • Связаться с нами
© Unity Technologies, 2025
  • Правовая информация
  • Политика конфиденциальности
  • Cookie-файлы
  • Использование персональных данных

Unity, логотипы Unity и другие торговые знаки Unity являются зарегистрированными торговыми знаками компании Unity Technologies или ее партнеров в США и других странах (подробнее здесь). Остальные наименования и бренды являются торговыми знаками соответствующих владельцев.

Hero background image

Профилируйте и анализируйте использование памяти с помощью инструментов профилирования памяти Unity

Эта страница предоставляет информацию о двух инструментах для анализа использования памяти в вашем приложении в Unity: Пакет профайлера памяти и модуль профайлера памяти.
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.
Нажмите здесь.
Руководство и учебник по профайлеру памяти | Unity

This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.

-

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

-

Информация здесь взята из Ультимативного руководства по профилированию игр Unity (издание Unity 6), электронная книга, созданная как внешними, так и внутренними экспертами Unity в области разработки игр, профилирования и оптимизации.

  • Что такое профилирование памяти?
  • Понимание и определение ограничения памяти
  • Определите минимальные спецификации RAM
  • Несколько советов по профилированию памяти
  • Пакет профайлера памяти
  • Компонент снимков
  • Вкладка Сводка
  • Вкладка Объекты Unity
  • Техники и рабочие процессы профилирования
  • Управляемые выделения, как показано в модуле профайлера памяти
  • Представления Timeline в модуле «Профайлер использования ЦП»
  • Стеки вызовов распределения
  • Представления «Иерархия» в модуле «Профайлер использования ЦП»
  • Аудитор проекта
  • Оптимизации памяти и GC

Что такое профилирование памяти?

Профилирование памяти в значительной степени не связано с производительностью во время выполнения, но полезно для тестирования на ограничениях памяти аппаратной платформы или если ваша игра вылетает. Это также может быть актуально, если вы хотите улучшить производительность CPU/GPU, внося изменения, которые фактически увеличивают использование памяти.

Существует два способа анализа использования памяти в вашем приложении в Unity:

- Модуль Профайлер памяти : Это встроенный модуль профайлера, который предоставляет основную информацию о том, где ваше приложение использует память в обычном профайлере.

- Профайлер памяти : Это специализированный инструмент, доступный в виде пакета Unity, который вы можете добавить в свой проект. Он добавляет дополнительное окно профайлера памяти в редактор Unity, которое вы затем можете использовать для более детального анализа использования памяти в вашем приложении. Вы можете сохранять и сравнивать отдельные графики для поиска утечек памяти, а также просматривать структуру памяти для выявления проблем с ее фрагментацией. Мы рассмотрим это более подробно позже в этом руководстве и сосредоточимся здесь на общих соображениях, которые вам нужно учитывать.

Оба этих инструмента позволяют вам отслеживать использование памяти, находить области приложения, где использование памяти выше ожидаемого, и находить и улучшать фрагментацию памяти.

Пакет профайлера памяти - это инструмент, который вы можете использовать для проверки использования памяти вашего приложения Unity и редактора Unity.
Пакет профайлера памяти - это инструмент, который вы можете использовать для проверки использования памяти вашего приложения Unity и редактора Unity.

Понимание и определение ограничения памяти

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

Вы можете найти спецификации памяти устройства в документации для разработчиков.

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

Определите физические ограничения ОЗУ

Поскольку каждая платформа имеет ограничение по памяти, вашему приложению потребуется бюджет памяти для каждого из его целевых устройств. Используйте профайлер памяти, чтобы посмотреть на захваченный снимок использования вашей памяти. Снимок Аппаратные ресурсы (см. изображение ниже) показывает размеры Физической оперативной памяти (ОЗУ) и Видеопамяти (VRAM). Эта цифра не учитывает тот факт, что не вся это пространство может быть доступно для использования. Тем не менее, это дает полезную ориентировочную цифру для начала работы.

Хорошая идея — сопоставить аппаратные характеристики целевых платформ, так как цифры, отображаемые здесь, могут не всегда показывать полную картину. Аппаратное обеспечение комплекта для разработчиков иногда имеет больше памяти, или вы можете работать с аппаратным обеспечением, имеющим унифицированную архитектуру памяти.

Снимок возможностей аппаратного обеспечения показывает объем ОЗУ и видеопамяти устройства, на котором был сделан слепок.
Снимок возможностей аппаратного обеспечения показывает объем ОЗУ и видеопамяти устройства, на котором был сделан слепок.

Определите минимальные спецификации RAM

Определите аппаратное обеспечение с наименьшей спецификацией ОЗУ для каждой платформы, которую вы поддерживаете, и используйте это для принятия решения о вашем бюджете памяти. Помните, что не вся физическая память может быть доступна для использования. Например, консоль может иметь гипервизор, работающий для поддержки старых игр, который может использовать часть общей памяти. Подумайте о проценте (например, 80% от общего), который использовать команде в зависимости от вашей конкретной ситуации. Для мобильных платформ вы также можете рассмотреть возможность разделения на несколько уровней спецификаций, чтобы поддерживать лучшее качество и функции для тех, у кого более мощные устройства.

Рассмотрите бюджеты на команду для больших команд

Как только вы определите бюджет памяти, подумайте о том, чтобы установить бюджеты памяти для каждой команды. Например, ваши художники окружения получают определенное количество памяти для использования для каждого уровня или сцены, которая загружается, команда звука получает выделение памяти для музыки и звуковых эффектов и так далее. Хотя это может показаться жестким, подумайте об этом как о руководящих принципах для информирования творческих решений, принимаемых по сравнению с затратами на ресурсы.

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

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

Несколько советов по профилированию памяти

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

Используемая память системы (или общая зарезервированная память, если использованная память системы показывает 0) + ориентировочный буфер неучтенной памяти / Общая память платформы

Когда эта цифра начинает приближаться к 100% бюджета памяти вашей платформы, используйте пакет Memory Profiler, чтобы выяснить, почему.

В Unity 6 многие функции модуля Memory Profiler заменены пакетом Memory Profiler, но вы все равно можете использовать модуль для дополнения ваших усилий по анализу памяти. Например:

- Чтобы обнаружить выделения GC: Хотя они отображаются в модуле, их легче отследить с помощью Project Auditor или глубокого профилирования.

- Чтобы быстро посмотреть на использованный/резервируемый размер кучи

- Анализ памяти шейдеров

- Используйте Подробный вид в модуле Memory Profiler, чтобы углубиться в самые большие деревья памяти и выяснить, что использует больше всего памяти.

Вот еще несколько ресурсов, которые помогут вам исследовать дополнительные случаи использования и функции Unity Profiler:

- Обзор профилирования в руководстве Unity

- Введение в профилирование в Unity

- Как профилировать и оптимизировать игру

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

Профилирование памяти - это другая задача по сравнению с профилированием CPU и GPU, потому что оно может привести к дополнительным накладным расходам на память. Вам может понадобиться профилировать память на более мощных устройствах (с большим объемом памяти), но особенно следите за лимитом бюджета памяти для устройств начального уровня.

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

- Настройки качества и графики могут повлиять на размер текстур рендеринга, используемых для теневых карт.

- Масштабирование разрешения может повлиять на размер экранных буферов, текстур рендеринга и эффектов постобработки.

- Настройки текстур могут повлиять на размер всех текстур.

- Максимальный LOD может повлиять на модели и многое другое.

Если у вас есть варианты AssetBundle, такие как HD (высокое разрешение) и SD (стандартное разрешение), и вы выбираете, какой из них использовать в зависимости от характеристик вашего целевого устройства, вы можете получить разные размеры активов в зависимости от того, на каком устройстве вы профилируете.

- Разрешение экрана вашего целевого устройства повлияет на размер текстур рендеринга, используемых для эффектов постобработки.

- Поддерживаемый графический API устройства может повлиять на размер шейдеров в зависимости от того, какие их варианты он поддерживает (или не поддерживает).

- Система с уровнями, использующая различные настройки качества и графики, а также варианты AssetBundle, является отличным способом нацелиться на более широкий спектр устройств.

Например, вы можете загрузить HD-версию AssetBundle на мобильное устройство с 4 ГБ, а SD-версию на устройство с 2 ГБ. Тем не менее, учитывайте вышеуказанные вариации в использовании памяти и убедитесь, что вы тестируете оба типа устройств, а также устройства с различными разрешениями экрана или поддерживаемыми графическими API.

Примечание: Редактор Unity, как правило, всегда будет показывать больший объем памяти из-за дополнительных объектов, загружаемых из Редактора и Профайлера. Кроме того, объем памяти текстур выше, так как они все вынуждены иметь включенный режим чтения/записи в Редакторе.

Модуль Профайлера памяти позволяет вам легко увидеть, сколько памяти вы выделили для системы.
Модуль Профайлера памяти позволяет вам легко увидеть, сколько памяти вы выделили для системы.

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

Пакет Профайлер памяти может помочь вам понять и оптимизировать использование памяти вашего проекта. Он позволяет вам захватывать 'снимки' памяти вашего приложения в определенные моменты времени, как в Редакторе Unity, так и в работающих сборках Player на вашем целевом устройстве.

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

После установки пакета Профайлер памяти откройте его через Окно > Анализ > Профайлер памяти.

Верхняя панель меню Профайлера памяти позволяет вам изменить целевую выборку игрока и захватить или импортировать снимки. Выпадающий список выбора цели в верхнем левом углу позволяет вам профилировать память непосредственно на вашем целевом оборудовании, подключив Профайлер памяти к удаленному устройству. Обратите внимание, что профилирование в Редакторе Unity даст вам неточные данные из-за накладных расходов, добавленных Редактором и другими инструментами.

Измените выбор игрока и захватите или импортируйте снимки памяти.
Измените выбор игрока и захватите или импортируйте снимки памяти.

Компонент снимков

Слева от окна Профайлера памяти находится Компонент Снимки. Используйте это для управления и открытия или закрытия сохраненных снимков памяти. Компонент Snapshot предоставляет два представления: Один снимок и Сравнить снимок.

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

Профайлер памяти имеет несколько вкладок в главном окне, которые позволяют углубиться в снимки памяти, ключевыми из которых являются Сводка, Объекты Unity и Вся память. Давайте рассмотрим каждую из этих опций подробнее.

Вы можете управлять несколькими снимками памяти.
Вы можете управлять несколькими снимками памяти.

Вкладка Сводка

Вкладка Сводка дает вам общее представление о использовании памяти вашего проекта в момент, когда был сделан снимок памяти. Это идеально подходит, когда вам нужен быстрый и информативный обзор без углубления в детальный анализ.

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

Советы: В правой панели (см. изображение ниже) вы найдете полезную контекстную информацию о вашем снимке. Они могут предупредить вас о возможных проблемах или помочь вам в интерпретации результатов.

Использование памяти на устройстве: Это показывает след приложения в физической памяти. Он включает все выделения Unity и не Unity, находящиеся в памяти в момент захвата.

Распределение выделенной памяти: Этот вид визуализирует, как выделенная память распределена по различным категориям памяти.

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

Использование управляемой кучи: В этом представлении вы получите разбивку памяти, которую управляет виртуальная машина сценариев Unity, включая управляемую кучу памяти, используемую для управляемых объектов, пустое пространство кучи, которое могло быть ранее использовано объектами или зарезервировано во время последнего расширения кучи, и память, используемую самой виртуальной машиной.

Топ категории объектов Unity: Это отображает, какие типы объектов Unity используют больше всего памяти в слепке (например, Texture2D, mesh, GameObject).

Вкладка Сводка отображает обзор памяти на момент создания слепка.
Вкладка Сводка отображает обзор памяти на момент создания слепка.

Вкладка Объекты

Вкладка Объекты Unity отображает любые объекты Unity, которые выделили память, сколько нативной и управляемой памяти использует объект и общую сумму. Используйте эту информацию, чтобы определить области, где вы можете устранить дублирующие записи памяти или найти, какие объекты используют больше всего памяти. И через строку поиска вы можете найти записи в таблице, которые содержат введенный вами текст.

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

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

Вкладка Объекты Unity позволяет вам детализировать использование памяти захваченного слепка с высокой степенью детализации.
Вкладка Объекты Unity позволяет вам детализировать использование памяти захваченного слепка с высокой степенью детализации.

Методы и рабочие процессы профилирования памяти

Начните с анализа слепка Memory Profiler, чтобы определить области с высоким использованием памяти. После того как вы захватите или загрузите слепок Memory Profiler, используйте вкладку Объекты Unity, чтобы проверить категории, упорядоченные от самой большой до самой маленькой по размеру занимаемой памяти.

Активы проекта часто являются крупнейшими потребителями памяти. Используя режим Таблицы, найдите текстуры, модели, аудиоклипы, текстуры рендеринга, варианты шейдеров и предвыделенные буферы. Это часто хорошие кандидаты для начала оптимизации использования памяти. Аудитор проекта - это отличный вспомогательный инструмент, так как он может предоставить некоторые рекомендации о том, как уменьшить использование памяти для активов (убедитесь, что актив правильно настроен в инспекторе Настройки импорта - это хорошее место для начала).

Поиск утечек памяти

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

Утечка памяти обычно происходит, когда:

- Объект не освобождается вручную из памяти через код.

- Объект непреднамеренно остается в памяти, потому что другой объект все еще ссылается на него.

Профайлер памяти имеет режим Сравнить снимки, который может помочь найти утечки памяти, сравнивая два снимка за определенный период времени. Это сравнение может выявить объекты, которые остаются в памяти, когда их следует освободить.

Частый сценарий утечек памяти в играх Unity - это после выгрузки сцены. Объекты из выгруженной сцены могут не быть правильно собраны сборщиком мусора, если на них все еще существуют ссылки.

Поиск повторяющихся выделений памяти на протяжении жизни приложения

С помощью дифференциального сравнения нескольких снимков памяти вы можете определить источник непрерывных выделений памяти на протяжении жизни приложения.

Следующие разделы предоставляют несколько советов, чтобы помочь определить управляемые выделения кучи в ваших проектах.

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

Управляемые выделения, как показано в модуле профайлера памяти

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

Любые пики в кадре, вызванные сборщиком мусора, помогут вам проанализировать управляемые распределения.
Любые пики в кадре, вызванные сборщиком мусора, помогут вам проанализировать управляемые распределения.

Представления Timeline в модуле «Профайлер использования ЦП»

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

Управляемые распределений отображаются в виде розовых маркеров в представлении Timeline.
Управляемые распределений отображаются в виде розовых маркеров в представлении Timeline.

Стеки вызовов распределения

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

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

Примечание: Если вы используете более старую версию Unity (до поддержки стека вызовов распределения), то глубокая профилировка — это хороший способ получить полные стеки вызовов, чтобы помочь найти управляемые выделения.

Выборки GC.Alloc, выбранные в иерархии или сырой иерархии, теперь будут содержать свои стеки вызовов. Вы также можете увидеть стеки вызовов выборок GC.Alloc в подсказке выбора на временной шкале.

Активировав функцию «Стеки вызовов распределения» в профайлере, вы сможете отслеживать стек вызовов обратно к источнику и управлять распределениями.
Активировав функцию «Стеки вызовов распределения» в профайлере, вы сможете отслеживать стек вызовов обратно к источнику и управлять распределениями.

Представления «Иерархия» в модуле «Профайлер использования ЦП»

Вид иерархии в профайлере использования ЦП позволяет вам щелкать по заголовкам столбцов, чтобы использовать их в качестве критериев сортировки. Сортировка по GC Alloc — отличный способ сосредоточиться на них.

Использование представления «Иерархия» в модуле «Профайлер использования ЦП» — отличный способ фильтровать данные и сосредоточиться на управляемых распределениях.
Использование представления «Иерархия» в модуле «Профайлер использования ЦП» — отличный способ фильтровать данные и сосредоточиться на управляемых распределениях.

Аудитор проекта

Аудитор проекта, представленный как пакет в Unity 6.1, является мощным инструментом анализа для проектов Unity, предназначенным для помощи разработчикам в оптимизации производительности, поддержании лучших практик и выявлении потенциальных проблем и узких мест в их проектах.

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

Аудитор проекта охватывает несколько различных областей:

Оптимизация производительности: Он выявляет проблемы, которые могут повлиять на производительность вашего проекта во время выполнения, такие как чрезмерная генерация мусора, ненужные выделения объектов или дорогие вызовы функций.

Обзор кода и ресурсов: Он выделяет неиспользуемые ресурсы, неэффективные шаблоны кода или устаревшие API, которые можно переработать. Это помогает уменьшить размер сборки, улучшить общую поддерживаемость проекта и оптимизировать использование памяти.

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

Настраиваемые отчеты: Он организует результаты по категориям, что упрощает приоритизацию оптимизаций. Вы также можете создать собственные правила, чтобы адаптировать анализ под ваш конкретный проект или потребности.

💡Советы:

- Запускайте Project Auditor на ключевых этапах разработки (например, перед контрольными точками, бета-релизами, финальными сборками). Регулярные аудиты помогают выявлять узкие места производительности, неиспользуемые ресурсы или устаревший код на ранних стадиях, предотвращая рост проблем по мере масштабирования вашего проекта.

- Вы можете автоматизировать запуск Project Auditor как часть вашей CI или сборочной настройки (как показано здесь в руководстве) и использовать отчеты, чтобы убедиться, что никто не добавляет ресурсы или код, которые создают новые проблемы (используя API, подробно описанный здесь).

- Вы можете добавить свои собственные правила, если есть определенные вещи, которые вы хотите поймать в вашей игре; например, настройки текстур, размеры или более сложные правила. Смотрите эту страницу в руководстве для получения дополнительных сведений о том, как это сделать.

Отчеты, сгенерированные Project Auditor, классифицируются по степени серьезности (Основные, Умеренные и Информация). Сначала сосредоточьтесь на самых серьезных проблемах, так как они часто подчеркивают критически важные проблемы производительности, такие как чрезмерное выделение памяти или чрезмерная сборка мусора. Они также, вероятно, будут находиться в кодовых путях, которые вызываются чаще, например, в Update, где любые проблемы с производительностью будут более очевидны для игроков.

Project Auditor также проверяет настройки, такие как Настройки игрока и Настройки качества и дает рекомендации о том, что вы можете изменить. Используйте это, чтобы убедиться, что ваши целевые сборки, разрешение, сжатие текста или другие настройки проекта оптимизированы для вашей целевой платформы.

Перезагрузка домена

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

Область кода в Project Auditor может анализировать скрипты в вашем проекте, чтобы помочь вам найти места, где вам нужно сбросить переменные скрипта. Считается хорошей практикой исправить все проблемы, отображаемые в представлении перезагрузки домена, а затем отключить перезагрузку домена. Чтобы заполнить этот вид данными, вы должны включить настройку Использовать анализаторы Roslyn в окне настроек. Затем вы можете просмотреть список проблем, следуя инструкциям в руководстве, чтобы исправить их. Как только все они будут решены, вы можете отключить перезагрузку домена при входе в режим игры.

Обзор сводки аудитора проекта
Обзор сводки аудитора проекта

Оптимизации памяти и GC

Unity использует сборщик мусора Бёма-Демерса-Уайзера, чтобы автоматически очищать память, когда она больше не нужна для вашего приложения. GC прекращает выполнение вашего программного кода и возобновляет нормальное выполнение только после завершения своей работы.

Хотя автоматическое управление удобно, ненужные или частые выделения могут привести к сбоям производительности, потому что сборщик мусора должен приостановить вашу игру, чтобы очистить неиспользуемую память (также известные как всплески GC). Вот некоторые распространенные ловушки, о которых стоит помнить:

Строки: В C# строки являются ссылочными типами, а не типами значений. Это означает, что каждая новая строка будет выделена в управляемой куче, даже если она используется только временно. Сократите ненужное создание или манипуляцию строками. Избегайте разбора файлов данных на основе строк, таких как JSON и XML, и вместо этого храните данные в ScriptableObjects или в форматах, таких как MessagePack или Protobuf. Используйте класс StringBuilder, если вам нужно создавать строки во время выполнения.

Вызовы функций Unity: Некоторые функции API Unity создают выделения в куче, особенно те, которые возвращают массив временных управляемых объектов. Кэшируйте ссылки на массивы, а не выделяйте их в середине цикла. Также воспользуйтесь определенными функциями, которые избегают генерации мусора. Например, используйте GameObject.CompareTag вместо того, чтобы вручную сравнивать строку с GameObject.tag (так как возврат новой строки создает мусор).

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

Упаковка: Боксинг происходит, когда тип значения (например, int, float, struct) преобразуется в тип ссылки (например, object). Избегайте передачи переменной типа значения вместо переменной типа ссылки. Это создает временный объект, и потенциальные мусорные данные, которые с ним приходят, неявно преобразуют тип значения в объект типа (например, int i = 123; object o = i). Вместо этого постарайтесь предоставить конкретные переопределения с типом значения, который вы хотите передать. Генерики также могут быть использованы для этих переопределений.

Корутины: Хотя yield не производит мусор, создание нового объекта WaitForSeconds - да. Кэшируйте и повторно используйте объект WaitForSeconds, а не создавайте его в строке yield.

LINQ и регулярные выражения: Оба этих метода генерируют мусор из-за боксинга за кулисами. Избегайте LINQ и регулярных выражений, если производительность является проблемой. Пишите циклы for и используйте списки в качестве альтернативы созданию новых массивов.

Общие коллекции и другие управляемые типы: Не объявляйте и не заполняйте список или коллекцию каждый кадр в Update (например, список врагов в определенном радиусе от игрока). Вместо этого сделайте список членом MonoBehaviour и инициализируйте его в Start. Просто очищайте коллекцию с помощью Clear каждый кадр перед использованием.

Сборка мусора времени, когда это возможно

Если вы уверены, что заморозка сборки мусора не повлияет на конкретный момент в вашей игре, вы можете вызвать сборку мусора с помощью System.GC.Collect. Классический пример этого - когда пользователь находится в меню или ставит игру на паузу, где это не будет заметно.

Смотрите Понимание автоматического управления памятью для примеров того, как использовать это в своих интересах.

Используйте инкрементный сборщик мусора, чтобы разделить нагрузку на сборку мусора

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

Обратите внимание, что использование сборщика мусора в инкрементном режиме добавляет барьеры чтения-записи к некоторым вызовам C#, что приводит к некоторым накладным расходам, которые могут составить около ~1 мс на кадр вызова скрипта. Для оптимальной производительности желательно, чтобы в основных игровых циклах не было выделений памяти сборщиком мусора, чтобы вам не нужен был инкрементный сборщик мусора для плавной частоты кадров, и вы могли скрыть GC.Collect там, где пользователь этого не заметит, например, при открытии меню или загрузке нового уровня. В таких оптимизированных сценариях вы можете выполнять полные, неинкрементные сборки мусора (используя System.GC.Collect()).

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

Руководство и учебник по профайлеру памяти

Документация по профайлеру памяти

Улучшите использование памяти с помощью профайлера памяти в Unity

Профайлер памяти: Инструмент для устранения проблем, связанных с памятью

Работа с профайлером памяти

вызов обрезан
Больше советов для Unity 6

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

Больше лучших практик