Мифы о Unity

Из своего опыта разработки я знаю, что менеджмент имеет превратное представление о возможностях Unity и его назначении. Я могу смело утверждать, что в 70% проектов Unity используется неправильно. Это вызывает проблемы при создании решений, из-за чего рушатся многие весьма интересные и прибыльные проекты.

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

Unity — кроссплатформенный.

Кроссплатформенный-то он кроссплатформенный, но от особенностей архитектуры платформы вы никуда не уйдёте. То что у вас хорошо работало на PC, не будет хорошо работать на мобильных платформах, просто в силу того что у вас в телефоне и в компе очень разные видяхи и процы. То что хорошо работало и выглядело на PC, будет предельно неудобным на консоли, плохо выглядящим в VR, и не заведётся в браузере. Т.е., Unity-то кроссплатформенный, в том смысле что проект, конечно (после многодневных танцев с бубнами ваших программистов) соберётся и запустится на целевой платформе… Только вот контент проекта, для того чтобы это было production ready, придётся переделывать почти полностью. Так что фактически он не кроссплатформенный нихрена.

Unity — простой.

Безусловно, Unity несколько проще для изучения, нежели игровые движки предыдущего поколения, в основном за счёт предельно дубовой архитектуры и обилия документации. Хотя, если сравнивать с современными движками, то строго говоря, нынешние Unreal или GameMaker как бы не попроще будут.

Но менеджмент и заказчики почему-то делают из этого странные выводы. Они либо ставят для юнитистов смешные ценники (100k+ для мидла и всего лишь 150k+ для сеньора) и нанимают вчерашних студентов-гуманитариев, либо нанимают в качестве Unity-разработчиков мудаков, покрытых родимыми пятнами, например, PHP и пересевших на Unity с очень другого технологического стека.

В обоих случаях нормально разрабатывать после этого не получается.

В первом — потому что Unity-разработчик для самостоятельной разработки должен иметь большой опыт. Во многом потому, что разработка на Unity это не столько код, сколько именно архитектура и интеграция. Задача разработчика в этом случае — не нахуярить 100500 строк кода в смену, а правильно импортировать нужные ассеты и выдумать методику объединения Unity-проекта с бизнес-логикой клиента. Код для этого не нужен — во некоторых случаях в современных Unity-проектах правильнее обходиться вообще без написания кода!

Во-втором — потому что, как я уже сказал выше, разработка Unity это не написание кода, а в первую очередь грамотное использование систем Unity. «Пересесть» на Unity с обычного программирования без проблем не получится, потому что Unity это крайне специфический опыт — по логике работы оно ближе к ЧПУ-станкам, роботам, и автопилотам, чем к web-приложениям и БД, над которыми трудятся подавляющее большинство кодеров. Студент с кафедры авионики из какого-нибудь условного МАИ или ГУАП разберётся в Unity быстрее и лучше, нежели бородатый разраб с гугловским сертификатом и 10+ лет опыта на Java и Go.

Unity — для быстрой разработки.

Нет. В рекламе Unity было сказано что он «good for rapid prototyping», что означает «хорош для быстрого прототипирования». Те кто перевели это как «для быстрой разработки» — мудаки, не знающие английского. Во-первых, «прототипирование» не равно «разработка», во-вторых «rapid» не значит «быстрый». Наиболее точным переводом этого будет «хорош для спешных набросков». Да, накидать объектов на сцену в Unity, связать это тремя с половиной скриптами и сбилдить, чтобы опробовать идею — это быстро. А вот разработка до состояния production ready на Unity обычно медленнее, чем на других технологиях. Просто потому что в 3D-окружении сложность разработки возрастает пропорционально количеству возможных взаимодействий объектов.

Unity — для AR/VR.

Как хороший 3D-движок, Unity, безусловно, может рисовать VR и запускаться на шлемах типа Oculus. Это, казалось бы, прекрасно… Но проблема в том, что VR- и AR-системы, в отличие от самого Unity, обычно должным уровнем поддержки и документации не обладают, особенно сейчас, когда AR/VR-технологии испытывают бум, а в России санкции. Поэтому разработка AR/VR приложений, даже в том случае когда заказчики понимают что такое реальный AR и VR, быстро превращается в мучительный бег по граблям.

И это в том случае когда менеджмент понимает что такое VR и AR. А многие не понимают! Большей дичи, чем в VR-проектах, я не видал даже в среде самых сумасшедших инди-девелоперов, создающих «новый World of Warcraft про СТАЛКЕР во вселенной СССР-2061 на Android». Там, по крайней мере, дичь вещает малолетний придурок с манией величия и комплексом неполноценности, а здесь дичь излагается обычно представительным дядей в галстуке и с часами дороже чем советский автомобиль.

Unity — универсальный.

Нет, и это не так. Unity это 3D-движок и его обвязка, созданная специально для разработки иммерсивных 3D-приложений (читай игр). Уже для 2D-игр Unity подходит плохо, т.к., заточен на 3D и в 2D большая часть его возможностей не используется, превращаясь в обузу. Я уж не говорю про разработку интерфейсов — перенос даже простенького интерфейса из Figma в Unity проект быстро превращается в занудную кропотливую работу руками, а сложный — в многодневный квест с поисками подходящих модулей, нервными созвонами с дизайнером и написанием мудрёного кода для того чтобы реализовать вот конкретно эту дизайнерскую задумку. А с бизнес-логикой вообще плохо. Unity работает в логике полужёсткого реалтайма, делая 60+ кадров в секунду, и очень не любит разнообразные HTTP-запросы, обращения к БД и прочую асинхронщину. Обычно наилучшим решением оказывается вынос всей бизнес-логики в некий внешний сервис, относительно которого Unity-приложение стоит отдельно.

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

Подитоживая.

Unity — не более чем очень хороший игровой 3D-движок, предназначенный для разработки игр.

Для других задач он не предназначен.

Когда вы начинаете пытаться использовать его для чего-то ещё, получается ситуация совы и глобуса — глобус трещит сова пищит. Обычно в роли совы выступают ваши проекты и непосредственно программисты. Талантливые программисты могут натянуть Unity (и себя вместе с ним) на очередной выдуманный вами глобус… Но только до определённого диаметра глобуса. После этого проекты с треском лопаются, и хорошо, если вас не забрызгивает (но обычно забрызгивает).

Не надо так делать.