Другое

Как произвести оптимизацию игры Unity и Unity3D: советы и лайфхаки

Lorem ipsum dolor

Оптимизация игры на Unity является неотъемлемым действием в процессе создания игры, ведь только создать игру мало. Нужно еще сделать так, чтобы она запускалась на устройствах пользователей и потребляла минимальное количество ресурсов. Между потреблением ресурсов устройства и производительностью игры присутствует прямая зависимость. Чем больше задействовано мощности устройства, тем производительней и качественней будет игра. Однако разработчик не может задействовать 100% мощности устройства для своей игры. Поэтому ему приходится искать компромисс и соблюдать баланс между качеством игры и потреблением ресурсов устройств. Оптимизация игры на Unity — это не что иное, как возможность отладить этот баланс.

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

Оптимизация игры на Unity 

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

  1. Использование Performance Profiler. Этот пункт является первым, который необходимо выполнить для улучшения производительности игры. Главная цель профайлера — анализ проблемных мест игры. При запуске игры профайлер начинает загружать данные о ее производительности в режиме реального времени, поэтому у разработчика будет реальное представление о том, что происходит с его игрой.

  2. Отредактируйте физику и использование искусственного интеллекта. Сюда входит множество мелких советов. Например: делать так, чтобы единовременно двигалось минимальное количество объектов, потому что объекты, которые «спят», стоят «дешевле». Не нужно запускать объект с ИИ, если объект игрока стоит очень далеко. Делайте меньше рейкаст, потому что они «дорогие». Где возможно, применяйте «coroutines» вместо «update()». Откажитесь от анимации простоя и сложных алгоритмов, таких как обратная кинематика, поиск пути и др.

  3. Используйте Static Batching в свойствах объекта. Этот инструмент помогает делать меньше «Draw Call», потому что каждый «Draw Call» это дополнительная нагрузка на процессор. Batching бывает статический и динамический. Статический в большей мере улучшает производительность. Динамический подходит для динамических объектов.

  4. Используйте «карты освещения». Карты подразумевают статическое освещение, которое не нужно рассчитывать на каждом кадре. Создание карт освещения — это долгий процесс, однако в конечном итоге такие карты дают прирост в производительности игры и имеют лучшее визуальное представление.

  5. Оптимизируйте дистанцию «обрезки» объектов. В некоторых играх более мелкие объекты необходимо «обрезать» агрессивнее, чем более крупные. Например, небольшие камни или траву необходимо «обрезать» на более коротких дистанциях, чем большие здания-высотки. Это делается при помощи инструмента «Level Of Details» или «руками», если настроить «обрезку» объектов для камеры по отдельным слоям.

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

  7. Сжимайте текстуры. Где это возможно, применяйте сжатие текстур и предпочитайте 16-битные текстуры вместо 32-битных.

  8. Следите за количеством вершин в кадре. Для компьютеров рекомендуемое количество вершин в одном кадре — от 200 тысяч до 3 миллионов.

  9. Используйте меньше математических операций. Каждая отдельная математическая операция требует дополнительных ресурсов от устройства. От всех математических операций никак не избавиться, но ограничить количество сложных возможно. К сложным операциям относятся: sin, cos, log, tan, exp и др.

  10. Больше кэшируйте. Кэшируйте все, что можно кэшировать через «GetComponent».

  11. Откажитесь от дорогостоящих операций. Этот пункт подразумевает отказ от LINQ. Эти запросы выглядят понятными и простыми, но требуют больше вычислительных ресурсов, если сравнивать с алгоритмами, написанными «руками».

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

Заключение

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

Более подробная инструкция о том, как проходит оптимизация игры на Unity, располагается на этом сайте.

Схожие статьи

Как сравнивать строки в Python при помощи встроенных операторов
Другое

Как сравнивать строки в Python при помощи встроенных операторов

Команда Git Stash: определение, виды, применение и как использовать
Другое

Команда Git Stash: определение, виды, применение и как использовать

Как полюбить программирование и стать настоящим разработчиком ПО?
Другое

Как полюбить программирование и стать настоящим разработчиком ПО?

Дорожная карта стартапа: пример составления качественной Roadmap
Другое

Дорожная карта стартапа: пример составления качественной Roadmap