Другое

Как произвести оптимизацию игры 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, располагается на этом сайте.

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

Программа для взлома мобильных игр на Android без root прав
Другое

Программа для взлома мобильных игр на Android без root прав

Подкасты по программированию: лучшие из них в одной подборке
Другое

Подкасты по программированию: лучшие из них в одной подборке

Абстрактный класс: определение, назначение и отличия от интерфейса С
Другое

Абстрактный класс: определение, назначение и отличия от интерфейса С

Опыт работы in-house: что это такое и в чем преимущества такого опыта?
Другое

Опыт работы in-house: что это такое и в чем преимущества такого опыта?

×