
Это первая статья в серии, которая раскрывает советы по оптимизации для ваших проектов Unity. Используйте их в качестве руководства для работы на более высоких частотах кадров с меньшими ресурсами. После того как вы попробуете эти лучшие практики, обязательно ознакомьтесь с другими страницами в серии:
Смотрите наши последние руководства по оптимизации для разработчиков и художников Unity 6:
Хорошо оптимизированный конвейер активов может ускорить время загрузки, уменьшить использование памяти и улучшить производительность во время выполнения. Работая с опытным техническим художником, ваша команда может определить и обеспечить форматы активов, спецификации и настройки импорта для обеспечения эффективного и упрощенного рабочего процесса.
Не полагайтесь только на настройки по умолчанию. Воспользуйтесь вкладкой переопределения, специфичной для платформы, чтобы оптимизировать активы, такие как текстуры, геометрия Mesh и аудиофайлы. Неправильные настройки могут привести к увеличению размеров сборки, более длительному времени сборки и плохому использованию памяти.
Рассмотрите возможность использования Предустановки, чтобы установить базовые настройки, адаптированные к вашим конкретным потребностям проекта. Этот проактивный подход помогает гарантировать, что активы оптимизированы с самого начала, что приводит к лучшей производительности и более последовательному опыту на всех платформах.
Для получения дополнительной информации обратитесь к лучшим практикам для художественных активов или изучите курс Оптимизация 3D-арта для мобильных приложений на Unity Learn. Эти ресурсы предоставляют ценные идеи, которые могут помочь вам принимать обоснованные решения об оптимизации активов для веб-сборок Unity, мобильных и XR приложений.

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

Переключение бэкенда сценариев с Mono на IL2CPP (промежуточный язык на C++) может обеспечить лучшую производительность во время выполнения. Тем не менее, это также может увеличить время сборки. Некоторые разработчики предпочитают использовать Mono локально для более быстрой итерации, а затем переключаться на IL2CPP для сборочных машин и/или кандидатов на релиз. Обратитесь к документации Оптимизация времени сборки IL2CPP для получения дополнительной информации о сокращении времени сборки.
Примечание: Используя эту опцию, Unity преобразует IL-код из скриптов и сборок в C++ перед созданием нативного бинарного файла (.exe, .apk, .xap) для вашей целевой платформы.
Смотрите Введение в внутренности IL2CPP или обратитесь к руководству по параметрам компилятора, чтобы узнать, как различные параметры компилятора влияют на производительность во время выполнения.
Мобильные проекты должны балансировать частоту кадров с временем работы от батареи и тепловым троттлингом. Вместо того чтобы нагружать ваше устройство на 60 fps, рассмотрите возможность работы на 30 fps в качестве компромисса. Unity по умолчанию устанавливает 30 fps для мобильных устройств.
При нацеливании на XR-платформы соображения частоты кадров становятся еще более критичными. Частота кадров 72 fps, 90 fps или даже 120 fps часто необходима для поддержания погружения и предотвращения укачивания. Эти более высокие частоты кадров помогают обеспечить плавный и отзывчивый опыт, что имеет решающее значение для комфорта в VR-средах. Тем не менее, это связано с собственными проблемами в отношении потребления энергии и теплового управления, особенно в автономных VR-гарнитурах.
Выбор правильной частоты кадров заключается в понимании конкретных требований и ограничений вашей целевой платформы, будь то мобильное устройство, автономная VR-гарнитура или AR-устройство. Тщательно выбирая подходящую частоту кадров, вы можете оптимизировать как производительность, так и пользовательский опыт на различных платформах.
Вы также можете динамически настраивать частоту кадров во время выполнения с Application.targetFrameRate. Например, вы можете снизить частоту ниже 30 fps для медленных или относительно статичных сцен и оставить более высокие настройки fps для игрового процесса.
Дополнительная информация доступна в документации.
Unity опрашивает акселерометр вашего мобильного устройства несколько раз в секунду. Отключите это, если оно не используется в вашем приложении, или уменьшите его частоту для улучшения общей производительности.
Узнайте больше об акселерометре.

Разделите свои иерархии. Если вашим GameObjects не нужно быть вложенными в иерархию, упростите родительские связи.
Меньшие иерархии выигрывают от многопоточности для обновления Трансформов в вашей сцене. Сложные иерархии требуют ненужных вычислений Трансформов и увеличивают затраты на сборку мусора.
Смотрите Оптимизация иерархии и этот доклад Unite для советов по Трансформам.
Рассмотрите эти два примера выше, использующие одну и ту же модель и текстуру. Настройки слева потребляют почти в 26 раз больше памяти, чем те, что справа, без значительного улучшения визуального качества.
Используйте адаптивное масштабируемое сжатие текстур (ATSC) для мобильных устройств, XR и веба. Подавляющее большинство игр в разработке, как правило, нацелены на устройства с минимальными характеристиками, которые поддерживают сжатие ATSC.
Единственные исключения:
Если сжатые форматы, такие как PVRTC и ETC, не обладают достаточным качеством, и если ASTC не полностью поддерживается на вашей целевой платформе, попробуйте использовать текстуры с 16 битами вместо 32 бит.
Смотрите руководство для получения дополнительной информации о рекомендуемом формате сжатия текстур по платформам.

Текстуры могут потенциально использовать избыточные ресурсы, поэтому оптимизация ваших настроек импорта критически важна. В общем, старайтесь следовать этим рекомендациям:
Узнайте больше о настройках импорта текстур.
Атласирование — это процесс группировки нескольких меньших текстур в одну большую текстуру. Атласы текстур уменьшают использование памяти и требуют меньше вызовов отрисовки, тем самым уменьшая нагрузку на GPU.
Объединяйте текстуры и переназначайте UV для любой 3D геометрии, которая не требует карт высокого разрешения. Визуальный редактор дает вам возможность устанавливать и приоритизировать размеры и позиции в Texture Atlas или Sprite Sheet.
Texture Packer объединяет отдельные карты в одну большую текстуру. Unity затем может выполнить один вызов отрисовки для доступа к упакованным текстурам с меньшими накладными расходами на производительность.
Читать больше о Sprite Atlases здесь.

Модели с высоким разрешением требуют больше памяти и потенциально более длительного времени работы GPU. Нужна ли вашей фоновой геометрии полмиллиона полигонов? Рассмотрите возможность уменьшения моделей в вашем DCC пакете по вашему выбору. Удалите невидимые полигоны с точки зрения камеры и используйте текстуры и нормальные карты для мелких деталей вместо высокоплотных сеток.

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

Дополнительные параметры оптимизации сетки доступны в настройках Player:
Автоматизируя процесс аудита, вы можете избежать случайного изменения настроек активов. AssetPostProcessor может помочь вам стандартизировать ваши настройки импорта или проанализировать существующие активы. Это позволяет вам запускать скрипты при импорте активов и, по сути, предлагает вам настроить параметры до и/или после импорта моделей, текстур, аудио и многого другого.
Узнайте больше о Аудите активов в Руководстве по пониманию оптимизации.
Unity использует кольцевой буфер для передачи текстур на GPU. Вы можете вручную настроить этот асинхронный текстурный буфер через QualitySettings.asyncUploadBufferSize.
Если скорость загрузки слишком медленная или основной поток зависает при загрузке нескольких текстур одновременно, настройте эти текстурные буферы. Обычно вы можете установить значение (в МБ) равным размеру самой большой текстуры, которую нужно загрузить в сцене.
Имейте в виду, что изменение значений по умолчанию может привести к высокому давлению на память. Кроме того, вы не можете вернуть память кольцевого буфера системе после того, как Unity ее выделит. Если память GPU перегружена, GPU выгружает самую последнюю и наименее используемую текстуру и заставляет CPU повторно загружать ее в следующий раз, когда она попадает в фрустум камеры.
Изучите все ограничения памяти для текстурных буферов в Учебнике по управлению памятью и обратитесь к Оптимизации производительности загрузки, чтобы увидеть, как вы можете улучшить время загрузки.
Система Потоковая загрузка Mip Map дает вам контроль над тем, какие уровни Mip Map должны загружаться в память. Включите ее, перейдя в настройки Качество Unity (Правка > Настройки проекта > Качество) и отметив опцию Потоковая загрузка текстур. Вы можете включить потоковые Mip Map в Настройках импорта текстур в разделе Дополнительно.
Эта система уменьшает общее количество памяти, необходимой для текстур, потому что она загружает только те Mip Map, которые необходимы для рендеринга текущего положения камеры. В противном случае Unity по умолчанию загружает все текстуры.
Потоковая загрузка текстур жертвует небольшим количеством ресурсов CPU, чтобы сэкономить потенциально большое количество памяти GPU. Она также автоматически уменьшает уровни Mip Map, чтобы оставаться в пределах заданного пользователем Бюджета памяти.
Вы можете использовать API потоковой загрузки Mip Map для дальнейшего контроля.

Система Адресуемых активов предоставляет упрощенный способ управления вашим контентом. Эта унифицированная система загружает AssetBundles по "адресу" или псевдониму, асинхронно из локального пути или удаленной сети доставки контента (CDN).
Если вы разделите свои не кодовые активы (модели, текстуры, префабы, аудио и даже целые сцены) на AssetBundle, вы сможете отделить их как загружаемый контент (DLC).
Затем используйте Addressables, чтобы создать более компактную начальную сборку для вашего мобильного приложения. Cloud Content Delivery позволяет вам размещать и доставлять контент вашей игры игрокам по мере их продвижения в игре.
Смотрите учебник Get started with Addressables на Unity Learn для быстрого обзора того, как система адресуемых активов может работать в вашем проекте.
И нажмите здесь, чтобы увидеть, как система адресуемых активов может упростить управление активами.


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