Unity5. Оптимизация.

Unity5. Оптимизация.

Как оптимизировать игру в Unity.

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

Первым делом, проверьте показатель “draw calls” в окне Profiler; если он составляет больше нескольких тысяч (для PC) или нескольких сотен (для мобильных устройств), то вам требуется оптимизация игровых объектов.

profiler

Вот несколько основных приемов и советов по оптимизации игр.

Текстуры и материалами.

Уменьшите количество различных материалов в сцене — используйте один материал для нескольких объектов,

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

Используйте сжатие текстур, когда это возможно, а также отдавайте предпочтение 16-битным текстурами перед 32-битными.

Используйте меньше текстур.

Настройка игрового мира.

Туман (Fog) – очень сильно нагрузит вашу игру,

Для не статических объектов с коллайдерами старайтесь использовать Rigibody в режиме isKinematic.

Используйте один источник света, а для отдельных затемнений карты используйте Lightmap`ы.

GPU обрабатывает слишком много вершин. Какое количество вершин является нормальным, определяется GPU и набором вертексных шейдеров. Можно посоветовать использовать не более 100 тысяч для мобильных устройств и не более нескольких миллионов полигонов для PC.

Сохраняйте количество вершин между 200 000 и 3 000 000 в каждом кадре, если целевая платформа — PC.

Установите свойство Static для неподвижных объектов, чтобы использовать внутреннею оптимизацию static batching.

Используйте скайбоксы для имитации далеко расположенной геометрии.

Тени в реальном времени хорошо выглядят, но они могут сильно снижать производительность, одновременно добавляя дополнительные draw calls для CPU и дополнительную обработку для GPU.

Настройка terrain.

Старайтесь не использовать большие размеры карт,

Установите значение pixel error максимальное значение,

Настройте отображение растительности, деревьев и объектов следующими параметрами:

  • Detail Density — Количество объектов деталей/травы в данной условной единице площади. Можно снизить значение для снижения потребления ресурсов на рендеринг,
  • Detail Distance — Расстояние (от камеры), после которого детали будут отсекаться,
  • Tree Distance — Расстояние (от камеры), за которым деревья будут отсекаться,
  • Fade length — Расстояние перехода деревьев из 3D объектов в плоские спрайты,
  • Max Mesh Trees — Максимальное количество видимых деревьев, которые будут представлены в качестве полноценных 3D мешей. После этого предела, деревья будут заменяться плоскими спрайтами.

Скрипты.

Метод FixedUpdate больше подойдет для небольших проверок относящиеся к физике,

CompareTag быстрее делает проверку тэга по имени,

Делайте как можно меньше вызовов thisTransform.forward или position, лучше эти значения один раз получить в Update,

(thisTransform.position — target.position).sqrMagnitude быстрее Vector3.Distance,

Старайтесь для включение скрипта на объекте при возможности использовать не GetComponent(…).enabled с заранее отключенным скриптом, а AddComponent(…) при заранее не повешенном скрипте на объекте,

Используйте статические переменные.

Заключение.

Если стараться придерживаться этих правил, можно достаточно существенно оптимизировать вашу игру.

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

На главную


Оставить Комментарий