Второе дыхание Unity 3D

Unity 3D

Мы уже не раз писали о том, что мобильные приложения вышли на новый уровень. Всё чаще задействуется виртуальная и дополненная реальность, заказчики стали падки на анимации, 3D-модели, визуальные эффекты и прочие "геймерские" элементы. Задачи разработчиков растут и усложняются, а следовательно, необходимы новые инструменты, предназначенные для борьбы с титанами, а не с насекомыми. Именно поэтому под пристальное внимание попал игровой движок Unity 3D.

Почему именно Unity? Всё началось с того, что в версии 5.5 разработчики добавили поддержку microsoft hololens, а позже подтянулась поддержка практически всех VR-платформ. К тому же, Unity просто идеально заточен под создание кроссплатформенных приложений - сборка осуществляется буквально за пару кликов! А это решает проблему многих заказчиков, желающих видеть свое приложение и на iOS, и на Android.

Благодаря обширному инструментарию по работе с 2D-объектами, Unity отлично подходит и для работы с не-игровым контентом. Подробнее обо всех возможностях этого инструмента мне удалось поговорить с Александром Михальченко, который уже давненько им интересуется.

Привет, Саш!
Привет, Стас!

Почему Unity стал столь популярен и востребован в последнее время?
Не сказал бы, что востребованным он стал прям уж в последнее время - популярным он был весьма давно. Когда Unity стал бесплатным, это ещё больше добавило ему популярности. Раньше за него приходилось платить около 30 долларов в месяц - точную сумму я не помню. Для того, чтобы что-то делать на Unity, необходимо было иметь платный аккаунт. Бесконечно это продолжаться не могло, поэтому с очередным обновлением Unity стал бесплатным, сохранив практически все штуки из Pro-версии, кроме, разве что расширенной поддержки.

Почему Unity разработчики стали востребованы в компаниях, которые не специализируются на разработке игр?
Дело в том, что Unity изначально затачивался под мультиплатформенную разработку. Он с лёгкостью может собрать приложение и под десктоп, и под мобильные устройства. Почему раньше это не было популярно? Это вопрос мощности самих устройств и производительности. Раньше Unity не был так популярен, потому что из-за своей универсальности движок "тяжеловат". Очень немногие мобильные устройства могли позволить себе запустить приложение, написанное на Unity, а если и запускали, то оптимизация оставляла желать лучшего.

Сегодняшние мобильные телефоны язык не повернётся назвать телефонами. По сути, это ноутбуки с 8 гигабайтами оперативной памяти и четырёхъядерными процессорами. Поэтому проблема производительности ушла, а плюсов у Unity великое множество. Основной из них - скажу опять - кроссплатформенность. То есть, мы пишем приложение один раз, собираем его под iOS, Android, Windows и запускаем во все маркеты, какие только можно - profit! Не нужно заниматься параллельной разработкой версий под разные платформы и платить двум специалистам. Достаточно нанять Unity разработчика, который сделает приложение под все платформы сразу.

Отличается ли приложение, написанное на Unity, от классического нативного?
Если мы говорим об Android приложении, то отличия несущественны. У Java есть своя виртуальная машина в Android, а у Unity - Unity Player. По сути, это такая же оболочка для запуска Unity приложений внутри Android. Ситуация с iOS немного сложнее из-за Objective-C и Swift. Эти языки нативные, на них писали приложения под iOS. За счёт этого мы имеем отличную производительность - Apple всегда славился тем, что на их устройствах все приложения "летают".

То есть, Unity приложения на iOS будут работать медленнее?
Я предполагаю, что по сравнению с нативными iOS приложениями, они будут работать медленнее. Но, опять-таки, вряд ли разница будет критической при современных мощностях устройств. Это не такой важный фактор, чтобы отказываться от Unity. Ради такого преимущества, как мультиплатформенность, можно чуть-чуть пожертвовать производительностью.

Разработка на Unity выйдет значительно дешевле?
Смотря что разрабатывать и когда. Unity более популярен в игровой среде, поэтому найти разработчика, который захочет на нём писать какое-то простое мобильное приложение в духе блокнота или мессенджера, будет сложно. Во всяком случае, пока что. Найти специалиста можно, найти толкового специалиста - на данный момент вряд ли. Сейчас Unity всё же больше известен как инструмент создания игр, а что будет в будущем - посмотрим.

Но разрабатывать не-игровые проекты можно?
Да, в Unity есть всё для этого.

Сколько платформ поддерживает Unity?
Точную цифру не помню, но приблизительно поддерживается около 20 платформ, включая XBox, Playstation, Windows, MacOS, iOS, Android, Blackberry и Symbian.

Связана ли популярность Unity с VR?
Скорее всего. Те библиотеки и инструменты, что сейчас есть в других языках - низкоуровневые, кустарные (т.е. open-source). Хороших коммерческих библиотек, которые можно было бы использовать в продакшене, практически нет. Есть Cardboard SDK от Google, но когда я проверял её в конце прошлого года, там было написано, мол, штука сугубо экспериментальная и не пытайтесь тащить её в продакшен. Насчёт таких вещей в iOS я не сильно осведомлён - знаю, что есть та же Cardboard SDK, а open-source библиотеки Apple никогда и не приветствовали.

В Unity есть встроенная поддержка виртуальной реальности. Раньше это был платный плагин из asset store, а после недавних обновлений поддержка VR появилась по умолчанию. Нужно просто поставить галочку напротив строки "VR Project" и создать две камеры - для левого и правого глаза. Достаточно будет нажать кнопочку play и движок сам отрендерит картинку в две камеры. Также можно будет настроить смещение расстояния между камерами и прочие параметры. Всё это делается легко, просто и быстро.

И с дополненной реальностью работает?
Да. Нашумевший Pokemon GO как раз был создан на Unity.

Если мы создаём некое приложение вроде органайзера, будет ли проще сделать внешний вид приложения в Unity и работать с изображениями от дизайнера, нежели заниматься классической вёрсткой?
Да. Там для этого есть два пути: делать элементы управления геометрией или UI. В Unity есть все текстовые формы ввода. Не могу сказать, насколько это гибко настраивается "из коробки" - скорее всего, для донесения необычной дизайнерской мысли придется приложить усилия. Например, нам нужна кнопка какой-то необычной, странной формы. Мы можем взять спрайт (картинку), вырезать её и поместить на то место, где у кнопки обычно находится графический элемент. Сама кнопка в Unity уже состоит из картинки - по умолчанию это белый прямоугольник с закругленными краями, с менюшкой и прочим, т.е. это часть кнопки. Мы эту часть можем выбросить и поместить туда какую угодно другую картинку, и она всё равно будет работать как кнопка. К тому же, Unity просчитывает collision, модель этой кнопки, поэтому область её действия будет более точная.

Помимо этого, в 5-й версии Unity для работы с интерфейсами был введён новый UI инструмент, который выглядит как сетка с якорями. Он позволяет очень гибко настроить положение всех контрольных зон на экране, и при изменении размера экрана эти кнопки будут двигаться ровно так, как изначально задал программист. Раньше для этих вещей использовалась геометрия, но теперь всё стало гораздо удобнее.

Я так понимаю, Unity на корню решает проблему с разными разрешениями Android устройств?
Да. Можно сделать интерфейс, который будет хорошо смотреться на любом устройстве, при любом разрешении экрана.

Что насчёт оптимизации под разные устройства?
Оптимизировать, безусловно, придётся, и в Unity есть для этого все встроенные средства. В настройках builder'а, который будет собирать итоговое приложение под то или иное устройство, мы можем указать сжать текстуры, аудио, видео и прочие вещи. Под десктоп, например, всё можно выставить на максимальное качество, а на мобильные устройства - на минимальное. В результате наше приложение станет легче и быстрее.

И напоследок: каково, по твоему мнению, будущее Unity?
Думаю, что светлое. Как только движок стал бесплатным, тысячи людей бросились писать свой Crysis, 3-й Half Life и другие "игры мечты". Иными словами, сообщество Unity возросло в геометрической прогрессии. А большое сообщество всегда создает большое количество продуктов - даже если не полноценных игр и приложений, то ассетов в asset store (есть люди, которые занимаются исключительно этим!), появляется больше кода.

Мощные мобильные устройства подстёгивают интерес бизнес-разработчиков в отношении Unity - ведь можно нанять одного Unity разработчика вместо двух iOS и Android. Тут, конечно, приложение приложению рознь - иногда требуется сугубо нативное решение, и тогда Unity проигрывает. В интернете хватает как платных, так и бесплатных курсов - обучаться может любой желающий, порог вхождения не так уж и высок.

Спасибо за увлекательную беседу!
Всегда пожалуйста.

Как можно видеть, при таком количестве достоинств, Unity просто обязан находиться в вашем ящике с инструментами. Очевидно, он не станет панацеей для решения всех проблем, что существуют в индустрии на сегодняшний день, но вопрос кроссплатформенности движок способен закрыть. Особенно приятно это должно быть Android разработчикам, которым больше нет надобности мучиться с огромнейшими вариациями разрешений экрана от разных производителей мобильных устройств. Unity способен облегчить разработку под VR, работу с внешним видом приложения и оптимизацию под разные платформы. А что будет дальше? Увидим в следующем обновлении и пожелаем его создателям и дальше с успехом реализовывать столь прогрессивные идеи.

Связаться