Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

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

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

И тем не менее, это удивительно распространенная проблема. Несжатая текстура 4K занимает 60 мегабайт памяти. На недорогих мобильных устройствах, таких как iPhone 4S, опасно потреблять более 180–200 мегабайт памяти. Если эта Текстура добавлена ​​по ошибке, она непреднамеренно занимает от трети до четверти бюджета приложения и вызывает труднодиагностируемые ошибки нехватки памяти.

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

Использование AssetPostprocessor

Класс AssetPostprocessor в редакторе Unity можно использовать для обеспечения соблюдения определенных минимальных стандартов в проекте Unity. Этот класс получает обратные вызовы при импорте активов. Чтобы использовать его, наследуйте от AssetPostprocessor и реализуйте один или несколько методов OnPreprocess. Важные из них включают:

  • OnPreprocessTexture

  • OnPreprocessModel

  • OnPreprocessAnimation

  • OnPreprocessAudio

См. Справочник по сценариям в AssetPostprocessor, чтобы узнать о других возможных методах OnPreprocess.

public class ReadOnlyModelPostprocessor : AssetPostprocessor { public void OnPreprocessModel() { ModelImporter modelImporter = (ModelImporter)assetImporter; if(modelImporter.isReadable) { modelImporter.isReadable = false; modelImporter.SaveAndReimport(); } } }

Это простой пример того, как AssetPostprocessor применяет правила к проекту:

Этот класс вызывается каждый раз при импорте модели в проект или при изменении параметров импорта модели. Код просто проверяет, установлен ли флаг Чтение/Запись включено (представленный свойством isReadable) в правда. Если это так, он принудительно устанавливает флаг false, а затем сохраняет и повторно импортирует актив.

Обратите внимание, что вызов SaveAndReimport приводит к повторному вызову этого фрагмента кода! Однако, поскольку теперь гарантируется, что isReadable имеет значение false, этот код не создает бесконечный цикл повторного импорта.

Причина этого изменения обсуждается в разделе "Модели" ниже.

Общие правила для объектов

Текстуры

Отключить флаг разрешения чтения/записи

Флаг Чтение/Запись разрешено приводит к тому, что Текстура дважды сохраняется в памяти: один раз в памяти графического процессора и один раз в памяти, адресуемой ЦП(1) (ПРИМЕЧАНИЕ: Это связано с тем, что на большинстве платформ чтение из памяти графического процессора происходит очень медленно. Чтение текстуры из памяти графического процессора во временный буфер для использования кодом процессора (например, Texture.GetPixel) было бы очень неэффективным.). В Unity этот параметр по умолчанию отключен, но его можно случайно включить.

Включить чтение/запись необходимо только при манипулировании данными текстур вне шейдеровПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
(например, с Texture.GetPixel и Texture.SetPixel API), и их следует по возможности избегать.

По возможности отключите MIP-карты

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

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

Сжать все текстуры

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

Если выбранное оборудование для сжатия текстур3D Graphics требует, чтобы текстуры были сжаты в специализированных форматах, оптимизированных для быстрой выборки текстур. Подробнее
See in Словарь
не подходит для целевой платформы, Unity распаковывает текстуру, когда Текстура подгружается, потребляя как процессорное время, так и чрезмерное количество памяти. Чаще всего это проблема на устройствах Android, которые часто поддерживают совершенно разные форматы сжатия текстур в зависимости от набора микросхем.

Применить разумные ограничения на размер текстур

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

Для многих мобильных приложений разрешение 2048 x 2048 или 1024 x 1024 достаточно для атласов текстур, а 512 x 512 – для текстур, примененных к 3D-моделям.

Модели

Отключить флаг включения чтения/записи

Флаг Чтение/запись включена для моделей работает так же, как и для текстур. Однако для моделей он включен по умолчанию.

Unity требует, чтобы этот флаг был включен, если проект изменяет Meshосновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в Словарь
во время выполнения с помощью скрипта или если Сетка используется в качестве основы для компонента MeshCollider. Если модель не используется в MeshCollider и ею не управляют скриптыфрагмент кода, позволяющий создавать собственные компоненты , запускать игровые события, изменять свойства компонентов с течением времени и реагировать на действия пользователя любым удобным для вас способом. Подробнее
См. в Словарь
, отключите этот флаг, чтобы сэкономить половину памяти модели.

Отключить риги на моделях, не являющихся персонажами

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

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

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

Параметр Оптимизировать игровые объекты существенно влияет на производительность анимированных моделей. Когда этот параметр отключен, Unity создает большую иерархию преобразования, отражающую костную структуру модели всякий раз, когда создается экземпляр модели. Эту иерархию преобразований дорого обновлять, особенно если к ней присоединены другие компоненты (например, системы частиц или коллайдеры). Это также ограничивает способность Unity к многопоточному скиннингумеши. Процесс связывания соединений костей с вершинами меша или «кожи» персонажа. Выполняется с помощью внешнего инструмента, такого как Blender или Autodesk Maya. Подробнее
См. Словарь
и расчеты анимации костей.

Если необходимо обнажить определенные места на костной структуре модели (например, обнажить руки модели для динамического прикрепления моделей оружия), то эти места можно специально разрешить в Extra Transforms список.

Некоторые дополнительные сведения можно найти на странице руководства Unity в моделе импорта.

По возможности используйте сжатие сетки

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

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

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

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

При добавлении средств визуализации сетки в префабытип ресурса, который позволяет хранить игровой объект с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее
См. в Словарь
или GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
, обратите внимание на настройки на компонент. По умолчанию Unity включает отбрасывание и получение теней, Light ProbeLight Probe хранит информацию о том, как свет проходит через пространство в вашей сцене. Набор световых зондов, расположенных в заданном пространстве, может улучшить освещение движущихся объектов и статических пейзажей LOD в этом пространстве. Подробнее
См. в Словарь
выборка, Reflection ProbeКомпонент рендеринга, который захватывает сферическое изображение своего окружения во всех направлениях, подобно камере. Захваченное изображение затем сохраняется как кубическая карта, которую можно использовать для объектов с отражающими материалами. Подробнее
См. в разделе Словарь
выборка и расчет вектора движения.

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

Для 2D-игр случайное добавление MeshRenderer в сцену с включенными параметрами тени добавляет полный проход тени к рендерингуПроцесс отрисовки графики на экран (или в текстуру рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Посмотреть в Словарь
. Как правило, это пустая трата времени.

Аудио

Настройки сжатия, соответствующие платформе

Включите формат сжатия для аудио, соответствующий доступному оборудованию. Все iOSмобильные операционные системы Apple. Подробнее
См. в Словарь
. Устройства включают аппаратные декомпрессоры MP3, и многие устройства Android изначально поддерживают Vorbis. .

Далее импортируйте несжатые аудиофайлы в Unity. Unity всегда повторно сжимает звук при создании проекта. Нет необходимости импортировать сжатый звук, а затем повторно сжимать его; это только ухудшает качество конечных аудиоклиповконтейнера для аудиоданных в Unity. Unity поддерживает моно-, стерео- и многоканальные аудиоресурсы (до восьми каналов). Unity может импортировать форматы аудиофайлов .aif, .wav, .mp3 и .ogg, а также форматы модуля трекера .xm, .mod, .it и .s3m. Подробнее
См. в Словарь
.

Принудительно сделать аудиоклипы монофоническими

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

Уменьшить битрейт аудио

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

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3