Unity3D — кросплатформенный игровой движок от компании Unity Technologies. История создания движка довольно интересная и поучительная. Интересная, потому что двое парней захотели сделать игру, но для этого им не подходили существующие инструменты. И они решили сделать свой движок, а потом уже делать на нем игру. И после того, как они сделали движок, они поняли, что им не так-то и интересно делать игры, а больше нравится заниматься непосредственно движком. Так и началась история одного из самых известных и мощных движков. А поучительная эта история потому, что никогда не знаешь, чем обернется то или иное начинание. Но мы немножко отошли от темы. Возвращаемся к движку.
Нажмите, чтобы перейти на официальный сайт движка
Юнити — бесплатный движок. Ограничение — при запуске игры показывается логотип Unity. Купив расширенную версию, вы избавитесь и от логотипа. Бесплатность движка — это то, что привлекло многих к разработке игр на нему. Взгляните на официальное видео движка, что на нем делают.
Как создавать игры в Unity?
Юнити использует компонентно-ориентированный подход. Все в игре — это обьект, куда добавлены различные компоненты. Например, если мы делаем платформер, мы добавляем GameObject, и к этому GameObject добавляем графический компонент (для отрисовки игрока) и компонент управления (чтобы можно было управлять игроком клавиатурой или мышкой). Таких различных компонентов можно добавить любое количество к любому GameObject. То есть, создание игры в Unity — это добавление GameObject-ов, и добавление им нужных компонентов.
Пусть вас не обольщает кажущаяся простота этого процесса. Чтобы сделать что-то нетривиальное, вам придется писать свои компоненты. В терминах Юнити они называются скриптами. Пишутся они на языке C#. Также есть JavaScript и Boo(урезанная версия Python), но реально используется лишь C#. Написание своих компонентов — это довольно сложное занятие. Фактически, это обычное программирование. Так что без знания какого-либо языка программирования вам придется туго.
Для чего подойдет и для чего нет
Unity — хороший выбор для создания средних по сложности проектов как для ПК, так и для мобильных устройств. Большое количество готовых ассетов, включая скрипты, очень этому помогает. Ну и большое сообщество — это тоже хорошо, вам помогут решить какой-либо затык, если он возникнет.
Если же вы делаете маленький проект — какой-либо кликер или что-то наподобии этого — задумайтесь, возможно, Unity будет слишком большим монстром для этого. Присмотритесь в сторону движков попроще — тот же LibGDX.
Ну и если вы делаете огромный проект AAA-класса, Unity тоже может быть проблемой. Сама по себе идея со скриптами хороша, но довольно медленна. Ну и язык C# — интерпретируемый. Несмотря на все JIT-оптимизации, он медленней за какой-нибудь C++. Сотни обьектов на сцене из сложными компонентами могут убить производительность. Поэтому для огромных проектов хорошим выбором может стать CryEngine, например.
Впрочем, все зависит от кривизны рук программиста. Толковые люди создавали на Unity большие проекты с хорошей производительностью. Правда, им приходилось много чего перепиливать в движке под себя. Так что, делая что-то грандиозное, будьте готовы погрязнуть в деталях движка. Действительно большим командам за отдельные деньги Unity Techologies предоставляет исходный код Unity, так что на крайний случай можно покопаться в исходниках, и что-то там поправить. Но опять же — все это имеет смысл лишь в случае огромных проектов.
Поддерживаемые платформы
Один из козырей Юнити — это список поддерживаемых платформ, где может запускаться приложения. Unity работает почти везде — на ПК (все операционные системы), на Андроид, на iOS, на SmartTV, в браузере, на различных экзотических системах — например, Tizen OS. Правда, не обошлось без ложки дегтя. Если вы работаете с чем-то специфическим, например, низкоуровневый доступ к железу в том же Андроиде — будьте готовы писать часть кода на Java, потом компоновать все это с Юнити. Аналогично с iOS. Также, собрать приложение под iOS можно лишь из-под MacOS X. То есть, не имея Макбука или чего-то похожего, игру на iOS вы так просто не выпустите. Это не недостаток Юнити, это ограничение Apple. Но ситуация именно такая. Так что в случае, если вы ориентируетесь на iOS — позаботьтесь о среде сборки вашей игры.
Как и где разработать игру на движке
Что касается процесса создания игр, то здесь либо Windows, либо Mac OS X. Есть экспериментальные сборки редактора под Linux, но пока что они довольно глючные. Все создание игры происходит в редакторе Unity, редактирование кода скриптов можно делать либо в MonoDevelop (идет по умолчанию), либо использовать сторонний редактор. Многие используют Visual Studio. Некоторые настраивают для этих целей Sublime Text.
Сила ассетов и комьюнити
Мощный плюс Юнити — это ассеты. Все в игре, включая код, картинки, представляется ассетам (Asset). Ассеты можно экспортировать, импортировать. Таким образом, сторонние разработчики могут делать целые заготовки для игр. Все, что вам останется — это заменить картинки, подправить скрипты — и можно релизить игру. Опять-таки, все не так просто, дьявол кроется в деталях. Различные ассеты могут быть несовместимы между собой как в прямом смысле, так и не подходить по стилю. Но это уже детали.
Есть специальный онлайн-магазин — Unity Asset Store. Там продаются готовые ассеты от сторонних разработчиков. Любой желающий может сделать свой ассет, и выложить его в продажу в этом магазине. Некоторые люди сделали на этом целый бизнес, благодаря большому рынку Unity-пользователей. Также важный момент, что магазин доступен прямо из редактора Unity. То есть, добавление новых ассетов максимлально упрощается. Вы заходите в магазин, кликаете на нужный ассет, и он сразу закачивается и добавляется в ваш текущий проект. Быстро и удобно.
Следующей крутой фишкой является комьюнити. Оно огромное. Если у вас есть какой-то вопрос, скорей всего, он уже много раз задавался, и столько же раз уже был решен. Поищите на профильных форумах, на StackOverflow. Почитайте частные блоги людей, что пишут игры на этом движке. Информации просто море. А если же нашелся вопрос, на который вы не нашли ответа — задайте его на официальном форуме Юнити, и с большой вероятностью вы получите ответ в тот же день. Это огромный плюс движка по сравнению с другими. Вы не один, вам всегда помогут.
Недостатки
Конечно, есть и минусы. Первый недостаток — это медленная работа. Если сравнивать из другими движками, тот же LibGDX или Cocos2D-X, Юнити медленный. Я знаю, что у этих движков разные цели, и что Unity ориентирован на проекты покрупнее, и наворотов в Юнити больше, но факт остается фактом. Для маленькой 2D игры, какого-либо платформера, Юнити будет работать медленней, чем альтернативы. Вы не заметите этого на ПК, но на мобильных устройствах это может быть заметно.
Следующее — это большой размер приложения. Большой — это значит, что если собрать пустой проект из настройками по умолчанию для Андроид, вы получите установочный файл порядка 20 мегабайт. Для ПК эта цифра будет порядка 100 мегабайт. Для больших проектов размером в гигабайты это не страшно, но вот для маленьких Андроид-игр, где вся графика и звуки занимают пять мегабайт, тянуть дополнительных 20 мегабайт может быть неприятно.
Еще один минус — это как бы не минус Юнити, но связан с ним. Ориентация на обьекты и скрипты, что прикреплены к этим обьектам, подталкивает разработчика создавать плохую архитектуру. Добавить новую возможность кажется таким простым делом. Всего-то написать скрипт, и прицепить его к обьекту. Но с ростом проекта связи между скриптами и обьектами усложняются, и добавлять новые фичи становится все тяжелее и тяжелее, игра стает более медленной и глючной. Это чем-то напоминает ситуацию с Delphi и цеплянием обработчиков событий на кнопки. Знающие люди поймут. Кто не в теме — скажем так, это плохо для больших приложений. Понятно, что и на Unity можно писать иначе, контролировать количество скриптов и связи между ними. Более того — большие проекты так и пишут. Но неопытные разработчики лепят скрипты на обьекты, а движок их не ругает за это.
Выводы
Если вы хотите написать свою игрушку, но не хотите сильно заморачиваться с изучением какого-либо языка программирования — Unity вам подойдет. Набросать обьектов, и связать их между собой получится и без знания языка программирования. В случае проблем большое сообщество вам поможет. Ну а если вы решите заняться играми серьезно, Юнити тоже будет хороший выбор. Как-никак, это полноценый мощный движок, в котором можно писать проекты AAA-класса.
Если вы пользовались Unity, пишите ваше мнение в комментариях. С удовольствием обсудим любые вопросы, которые вам интересны.