Советы по оптимизации Unity проекта

Рано или поздно практически любой разработчик на Unity сталкивается с проблемами производительности в своем проекте. И не важно, что это за проект: очередной AAA проект от известной студии, или Match 3 в новом сеттинге от новичков в игровой индустрии. Оптимизировать проект придется так или иначе. Также не важно, под какую платформу (платформы) написан проект: PC, консоль или мобильный. Кажется, что уж в 2019 году-то с гигагерцами не только на компьютерах, но и на телефонах, необходимость в оптимизации для не AAA проектов должна была отпасть. Но нет, приходится экономить спички практически как на заре игростроения. Непонятно, почему так происходит; возможно, это плата за скорость разработки в Unity? Гоу в комментарии, обсудим.

 

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

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

Читать →

Как наладить дружеские отношения между Unity и F#?

F# — это функциональный язык программирования (но, если точнее, на самом деле, это — мультипарадигмальный язык, т.к., кроме функционального программирования, он поддерживает как императивное программирование, так и объектно-ориентированное программирование) под платформу .NET Framework. Своего рода Scala в мире JVM, только для CLRF# предоставляет много интересных возможностей, и во многих сценариях он на две головы выше своего брата C#. Пожалуй, чтобы описать все преимущества F# над C#, потребуется целая статья (кстати, хорошая идея для следующей статьи), поэтому давайте не будем останавливаться на этом вопросе сейчас. Тем более, никто не обязывает нас писать проект полностью на F#. Если в каких-то местах есть необходимость (или более выгодно) писать на C#, нам никто не запретит это сделать. Таким образом, можно использовать сильные стороны обоих языков программирования!

 

Основным языком программирования в движке Unity, как, думаю, многим должно быть известно, является C#. И, несмотря на то, что F# движком Unity официально не поддерживается, нам попадалась информация от одного из сотрудников Unity в твиттере о том, что у них есть тесты некоторой кодовой базы на F#.

Другими словами, не стоит бояться писать на F# под Unity, только из-за того, что что-то может не заработать или не скомпилиться, т.к. F# официально не поддерживается. Все-таки, и C# и F# работают поверх CLR и компилируются в промежуточное представление (IL), которое и выполняется либо Mono, либо компилируется в нативный код посредством IL2CPP. Таким образом, для Unity, теоретически, абсолютно не важно, на каком языке вы будете писать.

Читать →

Несовершенство современного ПО на примере Unity

Разработка ПО в современном мире идет семимильными шагами. От релиза до релиза количество добавленых фич может составить несколько десятков (а порой счет идет и на сотни), а API измениться до неузнаваемости. И, вроде бы, в этом нет ничего плохо, но из-за количественных изменений довольно часто страдает качество. Баг-трекер забивается нерешенными задачами, частенько можно наблюдать регрессию по уже имеющемуся функционалу, а часть багов не правится по непонятным причинам, а порой и вовсе без таковых. Отправляемые баг-репорты отклоняются или ожидают минимального проекта для воспроизведения ошибки, а последний, зачастую, невозможно создать. А если все-таки удалось создать, то в ответ нередко получаешь отписку «У меня все работает».

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

Как вы уже могли догадаться, сегодня речь пойдет о нескольких мелких проблемах в Unity, вероятность исправления/улучшения которых стремится к нулю. Перечисленные ниже проблемы — это небольшая капля из того моря проблем, с которыми приходится сталкиваться ежедневно при работе с Unity. Думаю, если вы плотно общаетесь с Unity, то вам должно быть понятно, о чем идет речь. Вообще, стабильность Unity улучшается, и сейчас хотя бы можно стало работать (иногда недолго). Раньше это был просто кромешный ад из зависаний и крешей (сейчас же можно отработать день-другой, а можно встрять всего на полдня). И если на нашем относительно маленьком проекте столько проблем, трудно представить, сколько их на крупных проектах.
Читать →

Unity для новичков. Делаем зомби шутер. Часть 4

Введение в разработку на игровом движке Unity — практикум. Часть 4.
Это последний видеоурок из серии — завершаем проект. Улучшаем управление персонажем, добавляя движение камеры по вертикали. Создаем точки респауна зомби и генерируем их с уменьшением интервала. Заканчиваем UI: реализуем подсчет очков, используем делегат (Delegates) для обновления интерфейса, скрываем и фиксируем курсор мыши. Делаем билд игры.

Читать →

Unity для новичков. Делаем зомби шутер. Часть 3

Введение в разработку на игровом движке Unity — практикум. Часть 3.
Простое управление персонажем на основе компонента Character Controller. Работа с устройствами ввода. Что такое класс Input и оси управления и их использование для перемещения, поворота персонажа и прочих элементов управления.

Что такое Raycast и его использование на примере стрельбы. Использование информации о точке пересечения Raycast с объектом для добавления декалей и применения физической силы к игровым объектам. Добавление звуков в игру. Анимации, атака и смерть зомби.
Читать →

Unity для новичков. Делаем зомби шутер. Часть 2

Введение в разработку на игровом движке Unity — практикум. Часть 2.
Введение в работу с пользовательским интерфейсом в Unity. Как добавлять и манипулировать элементами пользовательского интерфейса, такими, как текст, изображение и кнопки. Что такое точки привязки (якоря) и точки начала координат (Pivot) элементов UI. Переход между сценами и выход из приложения по нажатию на графические кнопки.
Затрагивается работа с навигацией (поиском пути) в Unity. Запекание навигации, добавление и настройка агента.
И в заключение второго урока мы напишем небольшой скрипт поведения врагов и познакомимся с корутинами (Coroutine).
Читать →

Unity для новичков. Делаем зомби шутер. Часть 1

Введение в разработку на игровом движке Unity — практикум. Рассматривается как создать проект. Навигация в редакторе Unity и управление камерой основного вьюпорта. Как импортировать сторонние ресурсы в проект. Настройка персонажа гуманоидного типа для анимации. Базовые возможности системы анимации Mecanim. Даны примеры использования дерева смешивания и анимации по маске. Данное видео является вступительным в серии по созданию простого зомби-шутера.

Читать →

Лицевые анимации игровых персонажей

Рано или поздно каждый разработчик игр сталкивается с задачей кастомизации внешности персонажа и/или лицевыми анимациями. Согласитесь, современная игра в которой игровые персонажи говорят с закрытым ртом будет выглядеть довольно странно. И зачастую это ставит в ступор, ввиду того, что информации на данную тему очень мало, а в русском сегменте чуть меньше, чем нет совсем. Хотя, правильнее сказать, информация то есть, но совсем в другом направлении, не касательно разработки игр. Давайте рассмотрим как можно реализовать лицевые анимации для игры на движке Unity.

Читать →

Как сделать игру на Unity. Урок 8: Физика. Применение силы

В уроке рассмотрена настройка физики в проекте. А так же:

  • Что такое физический материал и их настройка.
  • Основные параметры компонента Rigidbody.
  • Применение физических сил к игровым объектам.

Читать →

Как сделать игру на Unity. Урок 7: Звук в игре

Урок о добавлении звука в игру. В видео рассмотрен импорт звука и правильная настройка для сохранения баланса между производительностью и затратами памяти. Показано использование основных компонентов, работающих с аудио. А также показано, как включать тот или иной звук по необходимости, на примере изменения звука шагов в зависимости от поверхности.
Читать →