Из своего опыта разработки я знаю, что менеджмент имеет превратное представление о возможностях 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 (и себя вместе с ним) на очередной выдуманный вами глобус… Но только до определённого диаметра глобуса. После этого проекты с треском лопаются, и хорошо, если вас не забрызгивает (но обычно забрызгивает).
Не надо так делать.
