Unity опубликовала исходный код своего игрового движка и редактора


Оглавление (нажмите, чтобы открыть):

Как создать простую 2D-игру на Unity

На создание игры обычно уходит много времени и сил, но если воспользоваться движком Unity, можно значительно ускорить процесс.

Unity — это движок для создания игр в 2D и 3D. Он позволяет в несколько раз ускорить разработку, потому что берет на себя огромную часть задач программиста:

Сейчас Unity очень популярен, на движке делают игры практически для всех платформ. Причем пользуются им не только инди-разработчики, но и крупные студии. С помощью Unity сделаны такие игры, как:

  • Outlast;
  • Hearthstone;
  • Cuphead;
  • Rust;
  • Firewatch;
  • Inside;
  • Cities: Skylines и другие.

Пишет о разработке сайтов, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.

Из этой статьи вы узнаете, из каких компонентов создается игра и как написать свой первый проект.

Как установить Unity

Скачать Unity можно на официальном сайте. Новичкам будет достаточно бесплатного тарифа “Personal”.

Важный момент! Последняя версия движка, которую предлагается скачать по умолчанию, может не поддерживаться на старых компьютерах; подходящую под возможности вашего компьютера версию стоит поискать в архиве версий. Игра для этой статьи написана на Unity 5.5.0f3. Интерфейс более поздних версий не сильно менялся, поэтому это руководство подойдет и для них.

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

Запустите установщик и следуйте инструкциям. Кроме самого движка, вам предложат установить Microsoft Visual Studio — интегрированную среду разработки. Она предоставляет лучшие возможности по работе со скриптами в Unity, но занимает много места на диске.

Если она уже установлена или если используется другой редактор кода, уберите галочку. Альтернативами могут быть Microsoft Visual Studio Code (более легкая версия Visual Studio) или MonoDevelop — встроенный редактор Unity.

Когда установка завершится, пора приступать к разработке своей первой игры.

Как создать проект в Unity

Для начала запустите Unity и нажмите кнопку New или New project.

Авторы игрового движка Unity анонсировали открытие кода некоторых компонентов

Разработчики игрового движка Unity объявили ближайшие планы по развитию своего проекта как свободного ПО и открытии кода некоторых компонентов под свободной лицензией MIT/X11.

История проекта Unity уже имеет примеры открытия исходного кода. Например, движок скриптов основывается на Mono и опубликован на GitHub, а также доступны инструменты для кросскомпиляции шейдеров (hlsl2glslfork и glsl-optimizer). Существуют проекты, используемые внутри компании, исходный код которых доступен на BitBucket (katana и hgwebcachingproxy). Кроме того, некоторые сотрудники компании участвуют в развитии используемых проектов — например, в системе контроля версий Mercurial. Однако в компании не имеют чёткого плана по открытию тех или иных компонентов и открывают исходный код, следуя определённым принципам:

  • передача контроля в руки пользователей для снижения различных рисков;
  • увеличение гибкости и применимости компонентов за счёт их настраиваемости;
  • использование возможностей Unity, которые раньше были недоступны.

Всё это необходимо для расширения сообщества разработчиков и пользователей Unity. Для участия в развитии проекта была подготовлена специальная инструкция (на англ.). Подпроекты Unity, доступные общественности, будут публиковаться в репозитории BitBucket под достаточно либеральной лицензией MIT/X11. Разработчики надеются, что участники, вносящие вклад в проект, будут использовать эту же лицензию.

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

Обзор самых популярных движков для разработки игр

Содержание статьи

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

Немного истории

Не волнуйся: дальше последних 10–15 лет я углубляться не буду. Я бы рад, конечно, пофилософствовать о былых временах, но редактор будет против (отстаньте вы уже от меня, я же не виноват, что журнал бумажный. — Прим. ред.).

Итак, еще 15 лет назад кодовая база для игр создавалась с нуля внутри компаний — разработчиков определенных продуктов. Немного позже (примерно в середине первого десятилетия XXI века) вслед за разработкой других компонентов игр, таких как арт или звук, создание движков вышло на аутсорсинг — выделилось в отдельную индустрию. Происходило это постепенно. Стоит отметить, что и в 90-е были игры на готовых движках (DOOM и Quake от id Software), но это было редким исключением от опередивших свое время дяденек, а правилом стало только в середине 2000-х. Во многом из-за дороговизны движков. А когда сформировалась обособленная кодовая индустрия, бизнес приобрел другой вид, появились движки широкой ценовой категории. Сначала рынок заполнился инструментами разработчиков — фреймворками, представляющими собой скорее графические движки, нежели игровые, отличающиеся от последних наличием лишь прослойки над графическим API и отсутствием внутриигровых редакторов: средств для level-моделинга, импорта объектов, текстурирования, загрузки и анимации персонажей. В качестве примера можно привести Ogre, DarkGDK (много лет назад я писал о нем), HGE. Позже на рынок вышли другие, более прокачанные игроки, предложившие разработчикам полноценные движки: Torque 3D, Unity 3D, UDK.

Одновременно с появлением полноценного рынка движков, в индустрии наметился отток геймеров от синглплеерных к мультиплеерным онлайновым играм. Результатом этого стало появление движков вроде HeroEngine и BigWorld.

Вслед за социальными сетями произошел всплеск интереса к веб-играм. На него разработчики движков отреагировали довольно оперативно, предоставив своим пользователям возможность запускать игры в браузере, установив плагин. Конечные пользователи в браузере получили игры, по качеству почти ничем не уступающие клиентским. С популярностью веб-игр большее распространение получила Flash-технология, в результате чего скромная Macromedia (разработчик Flash) была приобретена могущественным Adobe. А на базе Flash стали появляться не только игры, но и движки для их разработки. Хорошим примером служит движок Alternativa от отечественной компании Alternativa Platform.

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

Также на рынке появились новые игроки, предлагающие кросс-платформенные фреймворки для всего парка мобильных устройств, не требующие при этом даже перекомпиляции и выполняющиеся со скоростью нативного кода. Среди подобных средств можно отметить Corona SDK, Marmalade SDK, AGK (App Game Kit).

Универсальные движки

Unity 3D

Цена: indie-версия: free, pro-версия: 1500 долларов

Порог вхождения: низкий

Исходный код: закрытый

Самый популярный движок для создания 2D- и 3D-игр. Бесспорно, он стал лидером индустрии, и, как только появляется новая игровая/графическая технология, разработчики незамедлительно реализуют ее в Unity. Кроме разработки синглплеерных игр для PC, посредством подключаемых экспортеров можно портировать игры под другие ОС, консоли и мобильные технологии (за экспортер придется доплатить 1500 долларов за каждую платформу: iOS, Android, BlackBerry). Плюс к этому образовалась целая индустрия, работающая над созданием дополнений и расширений движка, среди них есть как специализированные серверные решения для Unity (e. g. Photon — полноценный игровой сервер), так и средства для разработки пользовательского интерфейса (NGUI), конструкторы, предназначенные для создания игр определенных жанров (e. g. Playmaker).

У самого редактора Unity есть порты под OS X и Windows, при этом изначально он был предназначен для OS X. В Unity включена поддержка DirectX 11, что открывает твоим приложениям дорогу в миры Windows 8 и Windows Phone 8. Во время написания статьи вышла очередная версия Unity под номером 4.2, в которой появилась поддержка последней на данный момент OpenGL ES 3.0, пока этими средствами обладают только топовые Android-смартфоны. Движок Unity особенно ценен за низкий порог вхождения для начинающих юзеров, благодаря этому, а также тому, что инди-версия бесплатна, вокруг движка организовалось огромное сообщество. Низкий порог вхождения является результатом грамотного дизайна приложения: многие вещи можно выполнить с помощью различных редакторов, не написав при этом ни строчки кода (если что, код пишется на JavaScript, C#, Boo). Исходный код на C/C++ закрыт, но это в связи с расширенной компонентной структурой движка не создает никаких преград.

Название: Torque 2D/3D

Цена: free (лицензия MIT)

Порог вхождения: средний

Исходный код: открытый

Несомненно, мой любимый игровой движок. Был в свое время лидером, но под натиском Unity утратил свои позиции. Тем не менее до сих пор на нем разрабатывается множество успешных проектов, поскольку он активно развивается сообществом. Не так давно я посвятил трехмерной версии целую статью в нашем журнале, поэтому сейчас я обращу твое внимание на Torque 2D.

Различия между двумерной и трехмерной версиями весьма значительны, но есть и общие элементы, например развитая сетевая подсистема. После выхода в мир open source T3D сохранил и даже увеличил свои возможности, а T2D, напротив, многое потерял. Например, он утратил абсолютно все встроенные редакторы, которые, очевидно, были изъяты из-за определенных юридических соглашений. Зато на нем можно разрабатывать игры для трех платформ: Windows, OS X и, что самое интересное, iOS (и продавать игры в App Store, не отчисляя ни копейки авторам движка). Весь движок — это одна кодовая база на C++ без дополнительных экспортеров. Во время написания статьи в сообществе разработчиков T2D кипела работа над созданием компилируемой версии для Android и реинкарнацией этих самых «потерянных» редакторов. Текущей стабильной версией является 2.0. Как видно, фундаментальные различия 2D- и 3D-версий заключаются в графической подсистеме: T2D для визуализации использует OpenGL, а T3D — DirectX, притом еще пока девятой версии, что преграждает созданным с его помощью играм путь в Windows Store. Есть куда развиваться!

В качестве скриптового языка в T2D, как и в T3D, используется Torque Script. Вместе с тем в T2D для описания игровых элементов служит XML-подобный язык TAML. Он позволяет определить свойства объектов на стадии инициализации уровня игры. Для воспроизведения звуков T2D использует библиотеку OpenAL. Симуляция физики осуществляется посредством движка Box2D, ставшего стандартом в двумерных физических исчислениях. Несмотря на то что в двумерном Торке еще пока нет конструктора GUI, с помощью средств движка (в скриптовом коде) можно создавать пользовательский интерфейс привычными компонентами, а не простыми спрайтами. Однако, если нужный компонент отсутствует, его можно создать на основе спрайтов. Имея аналогичную с 3D-версией сетевую систему, на T2D можно разрабатывать мультиплеерные игры, которые набирают популярность, — например P2P с планшетов. Вместе с T2D поставляется коллекция из огромного количества сэмплов, которая «дружно» укомплектована в Sandbox. В каждом примере раскрывается определенная фича движка, а наличие исходного кода позволяет узнать ее устройство.

Рис. 1. TruckToy — сэмпл на Torque 2D

Хакер #178. Mesh-сети или строим свой интернет

У семейства движков от GarageGames тоже есть комьюнити, которое делает полезные для остального сообщества вещи: создаются туториалы и мануалы, решаются проблемы — все, как принято при социализме. Есть и платные инструменты: система ИИ, разнообразные улучшения и эффекты графической системы, арт, встраиваемые редакторы — диалогов, инвентаря, террейнов, источников света.

CryEngine 3

Цена: free для некоммерческого использования (изучения и «домашних» разработок)

Порог вхождения: средний

Исходный код: закрытый

CryEngine 3 берет начало своей истории в 2001 году, когда была анонсирована первая разрабатываемая на нем игра Far Cry. С тех пор много воды утекло, и текущая — на данный момент третья — последняя версия была выпущена в октябре 2009-го. Разработчики этого движка с самого начала преследовали цель не самим создавать на нем игры, а продавать его как технологию. Следовательно, все разрабатываемые Crytek’ом игровые приложения — это «игра мышцами» с целью сделать дополнительную рекламу своему главному продукту. Хотя для изучения он доступен бесплатно, чтобы разрабатывать на нем коммерческие проекты, необходимо заплатить, причем цена публично не объявляется. В итоге лицензиат получает движок, документацию (обучающие материалы), исходный код, а также оперативную поддержку. Кроме того, процесс лицензирования движка таит в себе множество подводных камней — хотя бы то, что лицензировать его может только юридическое лицо, которое должно предоставить данные о разработанных продуктах и в отдельных случаях обо всех своих сотрудниках.

В отличие от предыдущих движков линейки (которые были исключительно PC-ориентированными), CryEngine 3 ориентирован на создание кросс-платформенных игр, предназначенных для PC и консолей. В настоящее время поддерживаются платформы Xbox 360, Xbox One, PlayStation 3–4, WiiU, а также технологии визуализации настольной Windows — DirectX 9–11. Как можно заметить, поддержки мобильных платформ нет. В нем изначально присутствует поддержка глобальных мультиплеерных (MMO) игр. CryEngine 3 обладает ошеломляющим списком технологий визуализации, вот некоторые из них: динамическое освещение и затенение в реальном времени, затуманивание, Terrain 2.5D, карты нормалей и параллакс-маппинг, подповерхностное рассеивание, световые лучи и волны, управление уровнем детализации ландшафта, а также многое другое. Самое интересное, что CryEngine по своим возможностям опережает текущую версию DirectX, то есть, к примеру, CryEngine 2 (в игре Crysis Warhead), визуализируя через DirectX 9, выдавал эффекты от DirectX 10. А третья версия движка, работая под DirectX 10, выдавала эффекты, ставшие доступными широкому кругу разработчиков только в DirectX 11. Физический компонент движка CryPhysics также работает независимо от физических API, таких как PhysX. Встроенная система анимации предлагает несколько отличных подсистем: индивидуализация персонажей, параметрическая скелетная анимация, процедурное деформирование движения. Также заслуживает отдельного внимания встроенная система ИИ, которая позволяет обрабатывать поведение не только персонажей, но и транспортных средств. Она состоит из трех модулей: умные объекты, алгоритмы динамического обнаружения пути, а также система, управляемая сценариями. В отсутствие лицензии, соответственно, при отсутствии исходного C++ кода ты будешь рулить движком с помощью скриптового языка Lua, который благодаря гибкости прекрасно подходит для встраивания в игровые движки. Да и при наличии исходника многие задачи проще решить скриптовым языком — это, кстати, справедливо для всех движков.

Рис. 2. Sandbox в CryEngine 3

UDK (Unreal Development Kit)

Цена: free

Порог вхождения: средний

Исходный код: закрытый

Прямой наследник движка, использующегося в одном из первых реально успешных командных шутеров. Тогда, еще в конце прошлого века, были выпущены Unreal и более успешный Unreal Tournament. Собственно, UDK построен на основе Unreal Engine 3 и использует всю мощь последнего.


UDK — это бесплатная версия движка UE 3, обладающая всем унаследованным инструментарием последнего для создания игровых миров. Список поддерживаемых платформ не настолько широк, как у Unity, но этого вполне хватает, чтобы окупить разработку: Windows PC, Windows Store, OS X, iOS, Android и консоли предпоследнего поколения.

Для скриптинга в движке используется собственный язык — UnrealScript. На сайте разработчиков представлены тонны обучающих материалов, как текстовых, так и видео, как по редактору, так и по скриптингу. UE3 получил множество наград на индустриальных мероприятиях, а также в кинематографе и не раз становился лучшим игровым/графическим движком года. По сути, UDK отличается от UE3 только отсутствием исходного кода. На базе данного движка выпущено более 300 тайтлов! В их числе: Gears of War 3, BioShock Infinite, Lost Planet 3, Transformers: Fall of Cybertron, Batman: Arkham Asylum, Mass Effect 3 и многие другие.

Теперь заглянем внутрь. Гибкая система анимации позволяет контролировать каждую деталь анимируемого объекта. Анимационная модель контролируется системой AnimTree, которая включает следующие механизмы: контроллер смешения (Blend), контроллер, управляемый данными, физические, процедурно-скелетные контроллеры. Для импортирования объектов используется формат FBX, ставший стандартом для экспорта моделей между редакторами. Для визуализации UE3 использует 64-битный цветной HDR графический конвейер, осуществляющий гамма-коррекцию, размытие движущихся объектов, внешнюю окклюзию и другие эффекты постобработки. Движком поддерживаются все современные эффекты освещения и технологии визуализации: нормализированные карты, параметризированное освещение по Фонгу, различные анизотропные эффекты и прочее. UE3 известен своей высоко оптимизированной сетевой архитектурой, включающей поддержку онлайновых баталий для игр разных жанров. Он обладает множеством других средств, которые, если тебе интересно, ты сможешь узнать сам, ну а мы перейдем к следующей теме.

Специальные MMO-движки

HeroEngine

Цена: 99 долларов в год (за одно рабочее место)

Порог вхождения: высокий

Исходный код: закрытый

Да-да, это тот самый движок, на котором разработана ошеломляющая MMORPG Star Wars: The Old Republic. История движка началась еще в конце девяностых, когда американская компания Simutronics приступила к разработке MMORPG Hero’s Journey. Как показало время, с игрой у них ничего не получилось: многократные переносы даты и срывы выхода проекта. Однако технология, на основе которой велась разработка, была высоко оценена внутри индустрии и на игровых мероприятиях, и движок был лицензирован несколькими студиями, в том числе BioWare. В итоге в 2010 году движок как самостоятельная технология был продан корпорации Idea Fabrik. В этом же году она начала продажу движка под двумя лицензиями. Первая лицензия предполагает покупку всего движка вместе с исходниками за баснословную (или все-таки охрененную) сумму денег. По второй лицензии за 99 долларов (в расчете на одного разработчика) на год приобретается доступ к облачному сервису, в котором с помощью специальной программы-клиента разработчик может создавать игру. Если исходить из первого варианта, то юзеру придется организовывать всю аппаратную и программную инфраструктуру игры (на рис. 3 можно увидеть клиент-серверную архитектуру HeroEngine). Кроме серверного железа, сюда входит: серверная ОС (Cent OS), БД Oracle, лицензия на которую стоит также немерено. Исходя из второго варианта, все лицензии на дополнительное ПО, обслуживание серверного ПО и железа берет на себя Idea Fabric — для инди-студий очень благоприятный вариант, поэтому далее мы приведем описание облачной технологии HE2.

Рис. 3. Клиент-серверная архитектура HeroEngine

Клиентское приложение (как и разработанные игры) предназначено только для Windows. В облаке над одной игрой могут работать сразу несколько человек: гейм-дизайнер пробует новую фичу, аниматор настраивает перса, левел-дизайнер строит уровень, кодер пишет логику. HeroEngine предоставляет всем участникам группы разработки специальные инструменты. Это составляет одно из важнейших преимуществ — «живая» совместная разработка. Второе, что ты получаешь вместе с HeroCloud, — это доступ к примерам реальных MMO-игр: от социальных до онлайн-шутера, среди сэмплов имеется «недоделанная» MMORPG Hero’s Journey, она представляет собой охватывающий все аспекты глобальных игр пример.

С технической стороны HeroEngine предлагает визуализацию на DirectX 9.0c и другие интегрированные программные системы, среди которых: PhysX — для обработки физики, FaceGen — middleware для генерации трехмерных лиц, FMod — для воспроизведения звуков и музыки, видеоконверторы от RAD Game Tools, высококачественная визуализация растений SpeedTree и другое.

Особого внимания заслуживают инструменты, предоставляемые HeroCloud. Итак, HeroBlade — клиентское приложение включает: World Builder — конструктор мира дает интуитивные инструменты для изменения ландшафта, построения зданий, размещения объектов, настройки динамического освещения; с помощью системы персонажей можно создавать легко настраиваемые, динамические существа, технология морфинга позволяет тонко настраивать лица и синхронизировать губы с речью; гибкая система слежения за костями позволяет создавать спецэффекты, происходящие, например, при ударе мечом; система эффектов включает параметризированную подсистему частиц: частицы могут быть источниками частиц, FX-система позволяет связать вместе частицы и аудиоэффекты; игровая система служит для возможности непрерывной работы, после внесения изменений тебе никогда не придется перезапускать игровой сервер или перезагружать БД, все изменения подхватываются на лету, кроме того, она предоставляет общие для всех MMO-игр компоненты, к примеру, во всех подобных играх, чтобы получить доступ к аккаунту, надо ввести логин и пароль, и такая система уже реализована; чтобы менеджер твоей команды мог самостоятельно следить за процессом разработки, в HB встроен DreamManager, который позволяет создавать и назначать таски для разработчиков, а также следить за их выполнением.

Для написания скриптов в движке есть объектно-ориентированный типобезопасный скриптовый язык HeroScript, написанные и скомпилированные скрипты сохраняются непосредственно на сервере. Скрипты на языке HeroScript выполняются даже быстрее Python-программ. Таким образом, все игровые действия, реакция на события, игровые механизмы и прочее реализуются на этом языке. Интегрированный скриптовый редактор не только подсвечивает код, но и позволяет провести отладку. Кроме того, в нем ведется история версий, он позволяет проводить сравнения, мержить изменения, то есть получать в свое распоряжение функции полноценной IDE. Вдобавок в HE есть удобный редактор GUI.

Рис. 4. HeroBlade в действии

Движок для мобильной платформы

Предел на размер статьи неумолимо приближается с каждым символом, но в разгар мобильных технологий я не могу не рассказать о движках данной категории.

Cocos 2D-X

Сайт: www.cocos2d-x.org

Цена:
free

Порог вхождения: средний

Исходный код: открытый

Оригинальный Cocos 2D был разработан на Python в 2008 году, затем в том же году он был портирован на языке Objective C под iPhone (версия Cocos 2D-iPhone); два годя спустя была выпущена кросс-платформенная версия Cocos 2D-X на C++.

Если коротко проследить дальнейшую историю, то видно, что потом появились версии с поддержкой Android (Java), XNA (C#) и HTML 5 (JavaScript). Также имеется расширение для визуализации трехмерной графики Cocos 3D, но оно не получило особого развития и распространения просто потому, что юзерам не хочется 3D на мобильном девайсе.

Самая востребованная версия именно Cocos 2D-X, благодаря C++ и кросс-платформенности. Текущей стабильной версией движка является 2.1.5, которая вышла 23 августа сего года. Заявлена поддержка: iOS, Android, Windows Phone 7 (XNA), BlackBerry, Tizen, Bada, Marmalade, Windows, Linux. Используя Cocos 2D-X, можно кодить на C++, Lua и JavaScript. Движком пользуются как программисты-исследователи, небольшие инди-команды, так и монстры игровой индустрии: Zynga, Konami, Disney Mobile. Благодаря бешеной популярности движка — полтора миллиарда закачек основанных на нем игр — в его развитии принимают участие разработчики из Google, Microsoft, Intel.

Поддержка движком акселерометра позволяет создавать динамичные игры с перемещением в пространстве. Безусловно, для обработки физики используется Box 2D, плюс, на выбор, движок Chipmunk. Имеется несколько специальных отдельных редакторов (как платных, так и бесплатных), служащих для создания определенного контента: атласы, шрифты, частицы, спрайтовые таблицы и так далее. Набор GUI-элементов довольно мал, но можно создать недостающие компоненты самостоятельно.

Итоги

Мы вкратце рассмотрели современные игровые движки для всех популярных на сегодняшний день платформ: универсальные, специально предназначенные для MMO и мобильные. Выбор навязывать не буду: все зависит от конкретного случая и предполагаемого проекта. На основе приведенных данных можно также сделать выбор, исходя из своего бюджета.

Мастер Йода рекомендует:  Адаптивные изображения WordPress без проблем

Однако, к сожалению, реальность такова, что в настоящее время имеет смысл разрабатывать игры только для двух платформ: iOS и Android. Будем считать, что я этого не говорил, так как я сам верю в светлое будущее и большие хардкорные игры. До встречи!

Проверяем исходный C#-код Unity

Недавно произошло долгожданное для многих событие — компания Unity Technologies разместила исходный C#-код игрового движка Unity для свободного скачивания на GitHub. Представлен код движка и редактора. Конечно, мы не могли пройти мимо, тем более, что в последнее время мы пишем не так много статей о проверке проектов на C#. Unity разрешает использовать предоставленные исходники только в справочных целях. Именно так и поступим. Испытаем последнюю на данный момент версию PVS-Studio 6.23 на коде Unity.

Введение

Ранее мы уже писали статью о проверке Unity. На тот момент для анализа было доступно не так много C#-кода: некоторые компоненты, библиотеки и примеры использования. Тем не менее, автору статьи удалось обнаружить довольно интересные ошибки.

Чем же Unity порадовал на этот раз? Я говорю «порадовал» и надеюсь, что не обижу этим авторов проекта. Тем более, что объем исходного C#-кода Unity, представленного на GitHub, составляет около 400 тысяч строк (без учета пустых) в 2058 файлах с расширением «cs». Это немало, и анализатор имел весьма широкое поле для деятельности.

Теперь о результатах. Перед началом анализа я немного упростил себе работу, включив режим отображения кодов по классификации CWE для найденных ошибок, а также активировав режим подавления предупреждений третьего уровня достоверности (Low). Эти настройки доступны в выпадающем меню PVS-Studio среды разработки Visual Studio, а также в параметрах анализатора. Избавившись таким образом от предупреждений с низкой достоверностью, я провел анализ исходного кода Unity, в результате которого было получено 181 предупреждение первого уровня достоверности (High) и 506 предупреждений второго уровня достоверности (Medium).

Я не стал изучать абсолютно все полученные предупреждения, так как их достаточно много. Разработчики или энтузиасты могут легко провести глубокий анализ, выполнив проверку Unity самостоятельно. Для этого у PVS-Studio предусмотрены триальный и бесплатный режимы использования. Также компании могут купить наш продукт и получить помимо лицензии быструю и подробную поддержку.

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

Результаты проверки

Что-то не так с флагами

Предупреждение PVS-Studio: V3001 There are identical sub-expressions ‘MethodAttributes.Public’ to the left and to the right of the ‘|’ operator. SyncListStructProcessor.cs 240

При комбинировании флагов перечисления MethodAttributes была допущена ошибка: значение Public использовано дважды. Возможно, виной тому неудачное форматирование кода.

Аналогичная ошибка допущена и в коде метода GenerateDeserialization :

  • V3001 There are identical sub-expressions ‘MethodAttributes.Public’ to the left and to the right of the ‘|’ operator. SyncListStructProcessor.cs 309

Предупреждение PVS-Studio: V3001 There are operator. RenderTextureEditor.cs 87

Я привел фрагмент кода, предварительно отформатировав его, поэтому ошибка легко обнаруживается визуально: дважды производится сравнение с RenderTextureFormat.ARGBFloat . В оригинальном коде это выглядит несколько иначе:

Вероятно, в одном из двух одинаковых сравнений необходимо использовать другое значение перечисления RenderTextureFormat .

Предупреждение PVS-Studio: V3008 CWE-563 The ‘fail’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1633, 1632. UNetWeaver.cs 1633

Переменной дважды присваивается значение true , так как Weaver.fail и fail — это одно и то же статическое поле класса Weaver . Возможно, грубой ошибки тут и нет, но код определенно требует внимания.

Предупреждение PVS-Studio: V3009 CWE-393 It’s odd that this method always returns one and the same value of ‘false’. ProjectBrowser.cs 1417

Метод всегда возвращает false . Обратите внимание на комментарий в начале.

Забыли про результат

Предупреждение PVS-Studio: V3010 CWE-252 The return value of function ‘Concat’ is required to be utilized. AnimationRecording.cs 455

При конкатенации двух массивов discardedModifications и discardedRotationModifications забыли сохранить результат. Вероятно, программист предположил, что результат будет отражен сразу в массиве discardedModifications . Но это не так. В результате из метода возвращают исходный вариант массива discardedModifications . Код необходимо исправить следующим образом:

Не то проверили

Предупреждение PVS-Studio: V3019 CWE-697 Possibly an incorrect variable is compared to null after type conversion using ‘as’ keyword. Check variables ‘obj’, ‘newResolution’. GameViewSizesMenuItemProvider.cs 104

В данном методе забыли предусмотреть ситуацию, когда переменная obj не будет равна null , но её не удастся привести к типу GameViewSize . Тогда переменная newResolution получит значение null , а отладочный вывод не будет произведен. Исправленный вариант кода мог бы иметь вид:

Предупреждение PVS-Studio: V3020 CWE-670 An unconditional ‘return’ within a loop. PolygonCollider2DEditor.cs 96

Цикл выполнит только одну итерацию, после чего метод завершит работу. Вероятны различные сценарии. Например, return должен находиться внутри блока if , либо где-то перед return пропущена директива continue . Вполне может быть, что ошибки тут и нет, но тогда следует сделать код более понятным.

Предупреждение PVS-Studio: V3021 CWE-561 There are two ‘if’ statements with identical conditional expressions. The first ‘if’ statement contains method return. This means that the second ‘if’ statement is senseless CustomScriptAssembly.cs 179

Две одинаковые проверки, следующие одна за другой. Очевидно, что в случае равенства buildingForEditor значению true , вторая проверка лишена смысла, так как в результате первой метод завершает работу. Если же значение buildingForEditor — false , то не будет выполнена ни then-ветвь первого оператора if , ни второго. Налицо ошибочная конструкция, требующая исправления.

Предупреждение PVS-Studio: V3022 CWE-570 Expression ‘index = parameters.Length’ is always false. AnimatorControllerPlayable.bindings.cs 287

Условие проверки индекса некорректно — результатом всегда будет false . Тем не менее, в случае передачи в метод GetParameter ошибочного индекса, исключение IndexOutOfRangeException все же будет выброшено, но уже при попытке доступа к элементу массива в блоке return . Правда, сообщение об ошибке будет несколько иным. Для того, чтобы код вел себя так, как ожидает разработчик, необходимо вместо оператора && в условии использовать ||:

Вероятно, вследствие использования методики Copy-Paste, в коде Unity присутствует ещё одна точно такая же ошибка:


Предупреждение PVS-Studio: V3022 CWE-570 Expression ‘index = parameters.Length’ is always false. Animator.bindings.cs 711

И ещё одна похожая ошибка, также связанная с некорректным условием проверки индекса массива:

Предупреждение PVS-Studio: V3022 CWE-570 Expression ‘handle.valueIndex = list.Length’ is always false. StyleSheet.cs 81

И в этом случае возможен выброс исключения IndexOutOfRangeException. Для исправления ошибки необходимо, как и в предыдущих фрагментах кода, использовать в условии оператор || вместо &&.

Просто странный код

На приведенный далее фрагмент кода указывают сразу два предупреждения:

Предупреждение PVS-Studio: V3022 CWE-571 Expression ‘bRegisterAllDefinitions || (AudioSettings.GetSpatializerPluginName() == «GVR Audio Spatializer»)’ is always true. AudioExtensions.cs 463

Предупреждение PVS-Studio: V3022 CWE-571 Expression ‘bRegisterAllDefinitions || (AudioSettings.GetAmbisonicDecoderPluginName() == «GVR Audio Spatializer»)’ is always true. AudioExtensions.cs 467

Выглядит, как незавершённый метод. Непонятно, почему его оставили в таком виде и не закомментировали бесполезные блоки кода. Всё, что метод делает в настоящее время:

Предупреждение PVS-Studio: V3022 CWE-570 Expression ‘PerceptionRemotingPlugin.GetConnectionState() != HolographicStreamerConnectionState.Disconnected’ is always false. HolographicEmulationWindow.cs 171

Для прояснения ситуации необходимо взглянуть на объявление метода PerceptionRemotingPlugin.GetConnectionState() :

Таким образом, вызов метода Disconnect() ни к чему не приводит.

С тем же методом PerceptionRemotingPlugin.GetConnectionState() связана ещё одна ошибка:

Предупреждение PVS-Studio: V3022 CWE-570 Expression ‘PerceptionRemotingPlugin.GetConnectionState() == HolographicStreamerConnectionState.Connected’ is always false. HolographicEmulationWindow.cs 177

Результат работы метода эквивалентен следующему:

Как видим, среди предупреждений V3022 нашлось немало интересных. Вероятно, если потратить ещё какое-то время, можно увеличить список. Но давайте двигаться дальше.

Предупреждение PVS-Studio: V3025 CWE-685 Incorrect format. A different number of format items is expected while calling ‘Format’ function. Arguments not used: index. Physics2D.bindings.cs 2823

Ошибки нет, но код, как говорится, «с запахом». Вероятно, ранее сообщение было более информативным, наподобие такого: «Negative path index <0>is invalid.» . Затем его упростили, но параметр index для метода Format убрать забыли. Конечно, это не то же самое, как забытый параметр для указанного спецификатора вывода в строку, то есть конструкция вида String.Format(«Negative path index <0>is invalid.») . В таком случае было бы выброшено исключение. Но и в нашем случае необходима аккуратность при рефакторинге. Код нужно исправить так:

Предупреждение PVS-Studio: V3053 An excessive expression. Examine the substrings ‘UnityEngine.’ and ‘UnityEngine.SetupCoroutine’. StackTrace.cs 43

Поиск подстроки «UnityEngine.SetupCoroutine» в условии лишен всякого смысла, так как перед этим производится поиск «UnityEngine.». Таким образом, следует удалить последнюю проверку, либо уточнить правильность подстрок.

Ещё одна подобная ошибка:

Предупреждение PVS-Studio: V3053 An excessive expression. Examine the substrings ‘Windows.dll’ and ‘Windows.’. AssemblyHelper.cs 84

Размер имеет значение

Предупреждение PVS-Studio: V3063 CWE-571 A part of conditional expression is always true if it is evaluated: pageSize Возможно деление на ноль

Предупреждение PVS-Studio: V3064 CWE-369 Potential division by zero. Consider inspecting denominator ‘(float)(width — 1)’. ClothInspector.cs 249

Проблема может возникнуть при передаче в метод значения w >. В самом методе это никак не проверяется. Метод GenerateColorTexture вызывается в коде всего один раз с параметром 100:

Так что ошибки пока нет. Но, на всякий случай, в методе GenerateColorTexture следует предусмотреть возможность передачи некорректного значения ширины.

Предупреждение PVS-Studio: V3080 CWE-476 Possible null dereference. Consider inspecting ‘m_Parent’. EditorWindow.cs 449

Вероятно, вследствие опечатки, выполнение данного кода гарантирует использование нулевой ссылки m_Parent . Исправленный код:

Точно такая же ошибка встречается и далее в коде:

Предупреждение PVS-Studio: V3080 CWE-476 Possible null dereference. Consider inspecting ‘m_Parent’. EditorWindow.cs 470

А вот ещё одна интересная ошибка, которая может привести к доступу по нулевой ссылке вследствие некорректной проверки:

Предупреждение PVS-Studio: V3080 CWE-476 Possible null dereference. Consider inspecting ‘objects’. TypeSelectionList.cs 48

Мне кажется, что разработчики Unity довольно часто допускают ошибки, связанные с неправильным использованием операторов || и && в условиях. В данном случае, если objects будет иметь значение null , то это приведет к проверке второй части условия (objects != null || objects.Length >= 1) , что повлечет за собой непредвиденный выброс исключения. Ошибку необходимо исправить следующим образом:

Предупреждение PVS-Studio: V3080 CWE-476 Possible null dereference. Consider inspecting ‘m_RowRects’. TreeViewControlGUI.cs 272

В данном случае выброс исключения (доступ по нулевой ссылке m_RowRects ) произойдет при формировании строки сообщения для другого исключения. Код можно исправить, например, так:

Снова ошибка при проверке

Предупреждение PVS-Studio: V3080 CWE-476 Possible null dereference. Consider inspecting ‘additionalOptions’. MonoCrossCompile.cs 279

Из-за того, что в условии использован оператор &, вторая часть условия будет проверена всегда, вне зависимости от результата проверки первой части. В случае, если переменная additionalOptions будет иметь значение null , неизбежен выброс исключения. Ошибку необходимо исправить, использовав оператор && вместо &.

Как видим, среди предупреждений с номером V3080 присутствуют довольно коварные ошибки.

Предупреждение PVS-Studio: V3095 CWE-476 The ‘element’ object was used before it was verified against null. Check lines: 101, 107. StyleContext.cs 101

Переменную element используют без предварительной проверки на неравенство null . При этом далее в коде такая проверка выполняется. Код, вероятно, необходимо исправить таким образом:

В коде есть ещё 18 подобных ошибок. Приведу списком первые 10:

  • V3095 CWE-476 The ‘property’ object was used before it was verified against null. Check lines: 5137, 5154. EditorGUI.cs 5137
  • V3095 CWE-476 The ‘exposedPropertyTable’ object was used before it was verified against null. Check lines: 152, 154. ExposedReferenceDrawer.cs 152
  • V3095 CWE-476 The ‘rectObjs’ object was used before it was verified against null. Check lines: 97, 99. RectSelection.cs 97
  • V3095 CWE-476 The ‘m_EditorCache’ object was used before it was verified against null. Check lines: 134, 140. EditorCache.cs 134
  • V3095 CWE-476 The ‘setup’ object was used before it was verified against null. Check lines: 43, 47. TreeViewExpandAnimator.cs 43
  • V3095 CWE-476 The ‘response.job’ object was used before it was verified against null. Check lines: 88, 99. AssetStoreClient.cs 88
  • V3095 CWE-476 The ‘compilationTask’ object was used before it was verified against null. Check lines: 1010, 1011. EditorCompilation.cs 1010
  • V3095 CWE-476 The ‘m_GenericPresetLibraryInspector’ object was used before it was verified against null. Check lines: 35, 36. CurvePresetLibraryInspector.cs 35
  • V3095 CWE-476 The ‘Event.current’ object was used before it was verified against null. Check lines: 574, 620. AvatarMaskInspector.cs 574
  • V3095 CWE-476 The ‘m_GenericPresetLibraryInspector’ object was used before it was verified against null. Check lines: 31, 32. ColorPresetLibraryInspector.cs 31

Некорректный метод Equals

Предупреждение PVS-Studio: V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. CurveEditorSelection.cs 74

Перегрузка метода Equals выполнена небрежно. Необходимо учесть возможность получения null в качестве параметра, так как это может привести к выбросу исключения, которое не было предусмотрено в вызывающем коде. Также к выбросу исключения приведет ситуация, когда не удастся привести _other к типу CurveSelection . Код требует исправления. Хороший пример реализации перегрузки Equals приведен в документации.

В коде есть и другие подобные ошибки:

  • V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. SpritePackerWindow.cs 40
  • V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. PlatformIconField.cs 28
  • V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. ShapeEditor.cs 161
  • V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. ActiveEditorTrackerBindings.gen.cs 33
  • V3115 CWE-684 Passing ‘null’ to ‘Equals’ method should not result in ‘NullReferenceException’. ProfilerFrameDataView.bindings.cs 60

И снова о проверке на неравенство null

Предупреждение PVS-Studio: V3125 CWE-476 The ‘camera’ object was used after it was verified against null. Check lines: 184, 180. ARBackgroundRenderer.cs 184

При первом использовании переменной camera , её проверяют на неравенство null . А вот далее по коду это сделать забывают. Исправленный вариант мог бы иметь вид:

Ещё одна подобная ошибка:

Предупреждение PVS-Studio: V3125 CWE-476 The ‘item’ object was used after it was verified against null. Check lines: 88, 85. TreeViewForAudioMixerGroups.cs 88

Допущена ошибка, приводящая в некоторых случаях к доступу по нулевой ссылке. Выполнение условия в первом блоке if обеспечивает выход из метода. Однако если этого не происходит, то нет гарантий, что ссылка item ненулевая. Исправленный вариант кода:

В коде есть ещё 12 аналогичных ошибок. Приведу списком первые 10:

  • V3125 CWE-476 The ‘element’ object was used after it was verified against null. Check lines: 132, 107. StyleContext.cs 132
  • V3125 CWE-476 The ‘mi.DeclaringType’ object was used after it was verified against null. Check lines: 68, 49. AttributeHelper.cs 68
  • V3125 CWE-476 The ‘label’ object was used after it was verified against null. Check lines: 5016, 4999. EditorGUI.cs 5016
  • V3125 CWE-476 The ‘Event.current’ object was used after it was verified against null. Check lines: 277, 268. HostView.cs 277
  • V3125 CWE-476 The ‘bpst’ object was used after it was verified against null. Check lines: 96, 92. BuildPlayerSceneTreeView.cs 96
  • V3125 CWE-476 The ‘state’ object was used after it was verified against null. Check lines: 417, 404. EditorGUIExt.cs 417
  • V3125 CWE-476 The ‘dock’ object was used after it was verified against null. Check lines: 370, 365. WindowLayout.cs 370
  • V3125 CWE-476 The ‘info’ object was used after it was verified against null. Check lines: 234, 226. AssetStoreAssetInspector.cs 234
  • V3125 CWE-476 The ‘platformProvider’ object was used after it was verified against null. Check lines: 262, 222. CodeStrippingUtils.cs 262
  • V3125 CWE-476 The ‘m_ControlPoints’ object was used after it was verified against null. Check lines: 373, 361. EdgeControl.cs 373

Выбор оказался невелик

Предупреждение PVS-Studio: V3136 CWE-691 Constant expression in switch statement. HolographicEmulationWindow.cs 261


И тут оказался виноват метод PerceptionRemotingPlugin.GetConnectionState() . Мы уже сталкивались с ним, когда изучали предупреждения V3022:

Метод вернет константу. Очень странный код. Необходимо обратить на него пристальное внимание.

Выводы

Думаю, на этом можно остановиться, иначе статья станет скучной и затянутой. Повторюсь, я привел ошибки, которые мне сразу бросились в глаза. Код Unity, несомненно, содержит большее число ошибочных или некорректных конструкций, требующих исправления. Трудность состоит в том, что многие из выданных предупреждений носят весьма спорный характер и точный «диагноз» в каждом конкретном случае способен поставить только автор кода.

В целом о проекте Unity можно сказать, что он богат на ошибки, но с учётом объема его кодовой базы (400 тысяч строк), всё не так плохо. Тем не менее, надеюсь, что авторы не будут пренебрегать инструментами анализа кода для улучшения качества своего продукта.

Используйте PVS-Studio и безбажного всем кода!

Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

Обзор игрового движка Unity3d

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 можно писать иначе, контролировать количество скриптов и связи между ними. Более того — большие проекты так и пишут. Но неопытные разработчики лепят скрипты на обьекты, а движок их не ругает за это.

Мастер Йода рекомендует:  35 лучших сайтов для самообразования

Выводы

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

Если вы пользовались Unity, пишите ваше мнение в комментариях. С удовольствием обсудим любые вопросы, которые вам интересны.

Unity опубликовала исходный код своего игрового движка и редактора

Список движков известных форуму!
И так, подводим итоги самых популярных движков для игр на платформе Android !

Остальные менее популярные движки известные нашему форуму:

  • Defold — бесплатный
  • Buildbox — бесплатный \ платный 2675$
  • INSTEAD — бесплатный
  • Corona SDK -бесплатный / платный 550$
  • Cocos2D — бесплатный
  • LIBgdx — бесплатный
  • ORX — бесплатный
  • jPCT 3D engine — бесплатный
  • Tululoo Game Maker — бесплатный
  • Game Maker Studio — платный 99$
  • Construct 2 — бесплатный \ платный 79$
  • Stencyl — бесплатный, но поддержка Android только в платной версии
  • G > — платный 149$
  • Marmalade — платный 150$ в год
  • Ardor3D — бесплатный
  • jMonkeyEngine — бесплатный
  • MOMINIS — бесплатный
  • IRM — бесплатный
  • Linderdaum Engine SDK — бесплатный
  • Moai SDK — бесплатный \ платный 99$
  • Esenthel Engine — платный 150$
  • IwGame Engine — бесплатный
  • DX Studio — бесплатный
  • BatteryTech Engine — бесплатный \ платный 249$
  • Unreal Engine 4 бесплатный, если суммарный доход за квартал не превышает 3000$ . Если доход превышает 3000$, то Вы платите разработчикам 5% от суммарного дохода от продукта за квартал.
  • e3ro > — бесплатный
  • Antiryad Gx 3 — бесплатный
  • gameQuery — бесплатный
  • Ethanon Engine — бесплатный
  • PGS4A — бесплатный
  • Crystal Space 3D — бесплатный
  • Godot Game Engine — бесплатный

  • Multimedia Fusion 2 -бесплатный 30 дней / платный
  • Monkey -платный 99$
  • Ignifuga -бесплатный

ТУТ НАЗВАНИЕ ДВИЖКА

Жанровая направленность: .
Мультиплеер: .
Лицензия: .
Открытость исходного кода: .
Язык программирования: .
Движок написан на: .
Платформа: . (пример iOS, Android, Bada. )
Достоинства: .
Недостатки: .

Официальные ссылки:
Официальная страница (тут ссылка на оф. страницу)

В теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).
До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.

Сообщение отредактировал derak1129 — 03.07.19, 20:26

Тема регулярно будет пополняться.

Сообщение отредактировал -=Toni=- — 10.06.13, 02:08

Сообщение отредактировал lihach77 — 10.08.14, 02:39

Сообщение отредактировал lihach77 — 03.03.12, 18:55

Open source 3d-движок Gamekit
Описание:
Кросс-платформеныый(Win, Linux, IOS, Android) движок основаный на игровом редакторе в blender, для вывода графики использует Ogre(также можно использовать irichlight или др. библиотеки)
Оффициальный сайт, Cтраница проекта на Google Code
Примеры игр на движке:
Zombie in Love
Видео игр на движке:
Zombie in love
Пример работы с акселерометром

Сообщение отредактировал lihach77 — 10.03.12, 22:11

Сообщение отредактировал lihach77 — 09.03.12, 22:14

Сообщение отредактировал lihach77 — 27.03.12, 21:07

Tululoo — продвинутая среда разработки, которая позволяет пользователю с легкостью создавать браузерные игры.
Программа генерирует JavaScript код, который может быть выполнен во всех браузерах, использующих HTML5.

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

Программа предоставляет необходимый набор функций для создания игр; недостающая функциональность легко реализуется дополнениями с JavaScript кодом.
Вместе с программой поставляется определенное количество стандартных игр-примеров. Дополнительный контент можно найти на официальном форуме программы.

Cразу отвечу на вопрос зачем оно тут. Ответ:PhoneGap

Сообщение отредактировал vitese200 — 13.05.12, 16:36

Game Maker Studio

Жанровая направленность:Любые 2Д игры ( + разные движки для 3Д игр (Gmogre и другие))
Платформы:Windows,Android,IOS,Mac OS,HTML 5,
Лицензия: Платная
Базовая стоить $99 и позволит создавать игры для Windows и Mac
+ экспортёры IOS, Android, HTML5, каждый $200
Языки программирования: Game Maker Language (Для создание простейших игр он не понадобиться )
Язык: Английский (Будит русик :happy: не беспокойтесь)
Сайт:https://www.yoyogames.com/gamemaker/studio
Мультиплеер:возможен при наличии нужных библиотек dll

+ +
Те, кто купил Game Maker
HTML5, автоматически получат доступ к Game Maker Studio с возможностью экспорта на Windows, Mac и HTML5.
Game Maker HTML5 в настоящее время можно приобрести за $99, что дает возможность
сэкономить $200 на стоимости покупки Game Maker Studio
такого же уровня сразу, как только он станет доступен
($299 = $99 основная
программа + $200 экспорт в HTML5).

+++
Те кто знаком с Game Maker будут тав как дома.

Это движок-конструктор
Он прост в обучении и в создании игр.
Так же вы можете в игры встраивать разные библиотеки DLL

p.s. крякнутая версия давно по нэту плавает :happy:
p.s.s по поводу создания игр на нём можете обращаться ко мне

Сообщение отредактировал xotta6bl4 — 18.07.12, 13:38

Stencyl
Платформа: Windows, Linux, Mac OS X, iOS, Flash, Android;
Жанровая направленность: 2D игры любого жанра;
Лицензия: Freeware;
Открытый исходный код: не предоставляется;
Достоинства: Бесплатность, удобный интерфейс, хорошая поддержка сообщества;
Недостатки: Достаточно простые игры;
Языки программирования: Drag-and-Drop (визуальный) + поддержка AS3 (для профессионалов);
Официальный сайт: https://www.stencyl.com/
Описание: Stencyl — достаточно мощный и гибкий инструментарий для создания двумерных флеш игрушек, позволяющий быстро и эффективно создавать и делиться ими с другими людьми. Ранее конструктор назывался StencylWorks, но после введения ряда обновлений и объединения разных его ветвей, разработчики приняли решение урезать названием просто до Stencyl.

Сообщение отредактировал GlebSTaR — 26.01.13, 11:50

Создатели Unity выложили исходники движка для ознакомления (ОБНОВЛЕНО)

Речь идет о выкладке интерфейсной части, которая может помочь девелоперам лучше понять, как работает движок, а не о самом коде.

Компания подчеркнула, что не переводит движок в статус проекта с открытым исходным кодом. Выложенные ресурсы Unity можно читать, но нельзя модифицировать.

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

Комментарий от редакции: первоначально, мы неверно указали, что речь идет в целом о C#-исходниках. Это не так.

Разработка вашей первой игры с помощью Unity и C#

Продукты и технологии:
Unity, C#, Microsoft .NET Framework, Mono

В статье рассматриваются:

  • интерфейс Unity;
  • сцены, игровые объекты и компоненты;
  • написание кода;
  • проекты кода, генерируемые Unity.

Как архитектор ПО я создал много систем, занимался обратным инжинирингом вредоносного программного кода и, в целом, мог бы достаточно легко разобраться почти в любом коде. Однако, когда дело дошло до создания игр, я слегка растерялся, даже не зная, с чего начать. На заре эпохи Windows я немного программировал графику в неуправляемом коде — не могу сказать, что это доставило мне удовольствие. Я тогда начинал разработку на DirectX, но осознал, что, хотя он обладает колоссальными возможностями, мне пришлось бы писать слишком много кода для того, что я хотел сделать.

И вот однажды я решил поэкспериментировать с Unity — инфраструктурой, способной на удивительные вещи. Это первая из четырех статей, в которой я расскажу об основах и архитектуре Unity. Я покажу, как создавать двух- и трехмерные игры и, наконец, как вести разработку с ее применением на платформах Windows.

Что такое Unity

Unity — это ядро и инфраструктура, образующие систему для разработки двух- и трехмерных игр или сцен в приложениях (и даже 2.5D). Я упоминаю игры и приложения потому, что встречал не только игры, но и обучающие симуляторы, приложения экстренного реагирования (first-responder applications) и другие приложения, ориентированные на бизнес, которые разрабатывались с помощью Unity и должны были обеспечивать взаимодействие с двух- и трехмерным пространством. Unity позволяет оперировать не только кодом, но и визуальными компонентами с последующим их экспортом на любую распространенную мобильную платформу, а также делать много всего другого, причем бесплатно. (Существует и профессиональная версия, но она не бесплатна. Впрочем, даже бесплатная версия позволяет делать впечатляющие вещи.) Unity поддерживает все основные 3D-приложения, множество форматов звука и даже понимает формат .psd (Photoshop), поэтому вы можете просто закинуть файл .psd в проект на Unity. Unity разрешает импортировать и собирать ресурсы, писать код, взаимодействующий с вашими объектами, создавать или импортировать анимации для использования с продвинутой системой анимации и многое другое.

В Unity проделана потрясающая работа, благодаря которой обеспечивается кросс-платформенная поддержка.

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

Рис. 1. Платформы, поддерживаемые Unity

Вероятно, самая мощная часть Unity — это Unity Asset Store; пожалуй, лучшая электронная площадка для приобретения игровых ресурсов. Здесь вы найдете все необходимые компоненты для своих игр, такие как художественные решения, трехмерные модели, файлы анимаций для трехмерных моделей (см. контент Mixamo в магазине для более чем 10 000 движений), звуковые эффекты и полные треки, плагины (в том числе, инструментальный набор MultiPlatform, помогающий поддерживать несколько платформ), визуальные скриптовые системы вроде PlayMaker и Behave, продвинутые шейдеры, текстуры, эффекты на основе частиц и др. Интерфейс Unity полностью управляем скриптами и поддерживает интеграцию сторонних плагинов прямо в Unity GUI. Большинство профессиональных разработчиков игр (если не все) использует ряд пакетов из этого магазина ресурсов, и, если вы можете предложить нечто приличное, публикуйте его там.

Microsoft и Unity тесно сотрудничают, чтобы обеспечить полную поддержку для всего стека платформ Microsoft.

И чем Unity не является

Я сомневаюсь, что нужно описывать все, чем Unity не является. Однако Unity по умолчанию не является системой, в которой проектируют двухмерные ресурсы и трехмерные модели (кроме террейнов). Вы можете вставить группу зомби в сцену и управлять ими, но создать самих зомби с помощью инструментария Unity, предлагаемого по умолчанию, нельзя. В этом смысле Unity не является инструментом создания ресурсов, подобным Autodesk Maya, 3DSMax, Blender или даже Adobe Photoshop. Однако существует минимум один сторонний плагин (ProBuilder) для моделирования трехмерных компонентов прямо в среде Unity; также имеются плагины для построения двухмерных миров, например 2D Terrain Editor, позволяющий создавать двухмерные тайловые среды (2D tiled environments). И еще вы можете проектировать террейны в Unity, используя его Terrain Tools, чтобы создавать потрясающие ландшафты с деревьями, травой, горами и т. д. Поэтому я вновь в сомнении: стоит ли очерчивать границы возможностей Unity.

Какова роль Microsoft? Microsoft и Unity тесно сотрудничают, чтобы обеспечить полную поддержку для всего стека платформ Microsoft. Unity поддерживает автономные исполняемые Windows-файлы, приложения Windows Phone, Windows Store, Xbox 360 и Xbox One.

Приступаем к работе

Скачайте самую новую версию Unity и приобретите себе двухкнопочную мышь с нажимаемым колесиком прокрутки. Бесплатная и профессиональная версия скачиваются как единый пакет, который потом лицензируется соответствующим образом. Изучить различия между этими версиями можно на странице unity3d.com/unity/licenses. Editor, который является основным интерфейсом Unity, выполняется в Windows (включая Surface Pro), Linux и OS X.

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

Архитектура и компиляция

Unity — это игровой движок, написанный на неуправляемом C++. Вы пишете код на C#, JavaScript (UnityScript) или Boo. Ваш код (не код движка Unity) выполняется в Mono или Microsoft .NET Framework и транслируется JIT-компилятором (кроме iOS, которая не поддерживает JIT-код, и для нее код компилируется Mono в неуправляемый код с использованием компиляции Ahead-of-Time [AOT]).

Unity позволяет тестировать вашу игру в IDE, не требуя никакого экспорта или сборки. Запуская код в Unity, вы используете Mono версии 3.5, API которого примерно на одном уровне совместим с .NET Framework 3.5/CLR 2.0.

Вы редактируете свой код в Unity, дважды щелкнув файл кода в представлении проекта. Это действие по умолчанию открывает кросс-платформенный редактор Mono­Develop. При желании можно сконфигурировать в качестве редактора Visual Studio.

Отладка осуществляется с помощью MonoDevelop или с использованием стороннего плагина для Visual Studio — UnityVS. Использовать Visual Studio в качестве отладчика без UnityVS нельзя, потому что при отладке игры вы отлаживаете не Unity.exe, а виртуальную среду в Unity, применяя программный отладчик, который выдает команды и выполняет операции.

Для отладки запустите MonoDevelop из Unity. В MonoDevelop есть плагин, который открывает обратное соединение с отладчиком Unity и выдает ему команды после того, как вы выбираете Debug | Attach to Process in MonoDevelop. С помощью UnityVS вы устанавливаете обратное соединение с отладчиком Visual Studio вместо Unity.


При первом открытии Unity вы увидите диалог проекта, показанный на рис. 2.

Рис. 2. Project Wizard в Unity

В диалоге проекта вы указываете имя и местонахождение своего проекта (1). Вы можете импортировать любые пакеты в проект (2), хотя отмечать все именно здесь не обязательно; список предоставляется только для удобства. Пакет можно импортировать и позже. Пакет — это файл .unitypackage, который содержит предварительно упакованные ресурсы (модели, код, сцены, плагины и все, что можно упаковать в Unity); эти ресурсы можно повторно использовать и распространять. Но не помечайте здесь что-то, если вы не знаете, что это такое; размер вашего проекта может увеличиться, причем весьма значительно. Наконец, вы можете выбрать 2D или 3D (3). Этот раскрывающийся список появился в Unity сравнительно недавно, поскольку до этого в Unity не было серьезного инструментария для разработки двухмерных игр. При выборе 3D настройки по умолчанию устанавливаются в пользу 3D-проекта — это типичное поведение Unity. Если вы выбираете 2D, Unity изменяет несколько вроде бы малых, но на деле очень важных деталей, о которых я расскажу в одной из следующих статей.

Этот список заполняется из файла .unitypackage в определенных местах вашей системы; Unity предоставляет большой выбор при установке. Все, что вы скачиваете из магазина ресурсов Unity, тоже поступает в виде файла .unitypackage и локально кешируется в вашей системе по пути C:\Users\ \AppData\Roaming\Unity\Asset Store. Как таковой, этот файл появится в списке, если он присутствует в вашей системе. Вы могли бы просто дважды щелкнуть любой файл .unitypackage, и он был бы импортирован в ваш проект.

Продолжая рассматривать интерфейс, я щелкну Create в диалоге с рис. 2, чтобы создать новый проект. Разметка окна Unity по умолчанию приведена на рис. 3.

Рис. 3. Окно Unity по умолчанию

Вот что мы видим.

  1. Project Все файлы в проекте. Для добавления файлов в проект их можно просто перетаскивать из Explorer в Unity.
  2. Scene Текущая открытая сцена.
  3. Hierarchy Все игровые объекты в сцене. Обратите внимание на термин GameObjects и раскрывающееся меню GameObjects.
  4. Inspector Компоненты (свойства) выбранного в сцене объекта.
  5. Toolbar Ближе к левому краю размещаются кнопки Pan, Move, Rotate, Scale, а в центре — Play, Pause, Advance Frame. Play почти мгновенно запускает игру без выполнения отдельных сборок. Pause приостанавливает игру, а Advance Frame обеспечивает покадровое выполнение, предоставляя вам очень жесткий отладочный контроль.
  6. Console Это окно может стать понятным не сразу, но в нем отображается вывод процесса компиляции, ошибок, предупреждений и т. д. Кроме того, в нем показываются отладочные сообщения из кода, например Debug.Log будет отображать свой вывод здесь.

Важно упомянуть о вкладке Game рядом с вкладкой Scene. Она становится активной, когда вы щелкаете Play и ваша игра начинает выполняться в этом окне. Это называется режимом игры (play mode) и создает вам игровую площадку для тестирования вашей игры; можно даже «на лету» вносить изменения в игру, переключаясь обратно на вкладку Scene. Но будьте осторожны. Пока подсвечивается кнопка Play, вы находитесь в режиме игры, и, если вы покидаете его, любые изменения, внесенные в режиме игры, будут потеряны. Я, как и почти все разработчики на Unity, с кем мне доводилось разговаривать, именно так теряли проделанную работу, поэтому советую сменить цвет Editor на такой, по которому было бы очевидно, когда вы находитесь в режиме игры. Это можно сделать через Edit | Preferences | Colors | Playmode tint.

Все, что выполняется в вашей игре, существует в сцене.

О сценах

Все, что выполняется в вашей игре, существует в сцене. Когда вы упаковываете игру для какой-то платформы, конечный продукт представляет собой одну или более сцен плюс любой добавленный вами код, специфичный для конкретной платформы. Количество сцен в проекте не ограниченно. Сцену можно рассматривать как уровень в игре, хотя в одном файле сцены может быть несколько уровней — достаточно перемещать игрока (камеру) в другие позиции сцены. Скачивая сторонние пакеты или даже примеры игр из магазина ресурсов, вы обычно должны найти файлы сцен, чтобы открыть их в своем проекте. Файл сцены содержит всевозможные метаданные о ресурсах, используемых в проекте для текущей сцены и ее свойств. Важно почаще сохранять сцену при разработке нажатием клавиш Ctrl+S, как и в любом другом инструментарии.

Как правило, Unity открывает последнюю сцену, с которой вы работали, хотя иногда, когда Unity открывает проект, создается новая пустая сцена, и вам придется искать сцену в Project Explorer. Новичков это сбивает с толку, но важно помнить об этом, если вы вдруг открыли свой последний проект и не можете понять, куда подевалась вся ваша работа! Расслабьтесь, вы найдете искомое в файле сцены, который вы сохранили в своем проекте. Вы можете искать все сцены в проекте, щелкнув значок, показанный на рис. 4, и выбрав в списке Scene.

Рис. 4. Фильтрация сцен в проекте

В сцене вы ничего не увидите без камеры и ничего не услышите без компонента Audio Listener, подключенного к какому-либо GameObject. Но заметьте, что в любой новой сцене Unity всегда создает камеру с подключенным к ней компонентом Audio Listener.

Структура проекта и импорт ресурсов

Проекты Unity не похожи на проекты Visual Studio. Вы не открываете файл проекта или даже решения, потому что таких файлов нет. Вы указываете Unity структуру папок и открываете папку как проект. Проекты содержат папки Assets, Library, ProjectSettings и Temp, но в интерфейсе появляется только папка Assets, что можно было заметить на рис. 4.

Папка Assets содержит все ваши ресурсы: художественную графику, код, звуки; любой отдельный файл, добавляемый в проект, попадает именно в эту папку. Она всегда является папкой верхнего уровня в Unity Editor. Учтите, что изменения следует вносить только через интерфейс Unity, — никогда не пытайтесь делать это через файловую систему.

Папка Library — это локальный кеш для импортированных ресурсов; она содержит все метаданные для ресурсов. В папке ProjectSettings хранятся настройки, заданные вами в Edit | Project Settings. Папка Temp используется для временных файлов, создаваемых Mono и Unity в процессе сборки проекта.

Я хочу еще раз подчеркнуть важность внесения изменений только через интерфейс Unity — не делайте этого напрямую через файловую систему. Это относится даже к простым операциям копирования и вставки. Unity отслеживает метаданные для ваших объектов через редактор, поэтому используйте редактор для любых правок (кроме нескольких редких случаев). Однако вы можете перетаскивать объекты из файловой системы в Unity — такой вариант работает нормально.

Крайне важный GameObject

Практически все в вашей сцене является GameObject. Вспомните System.Object в .NET Framework. От него наследуют почти все типы. Та же концепция относится и к GameObject. Это базовый класс для всех объектов в сцене Unity. Все объекты, показанные на рис. 5 (и многие другие), наследуют от GameObject.

Рис. 5. Класс GameObject в Unity

Lights Источники освещения
3D Models 3D-модели
Sprites Спрайты
HUDs Игровые интерфейсы
Particle Systems Системы частиц
GameObject GameObject

GameObject довольно прост, так как он относится к окну Inspector. На рис. 6 видно, что к сцене был добавлен пустой GameObject; обратите внимание на его свойства в Inspector. У GameObject по умолчанию нет визуальных свойств, если не считать того, что при выделении этого объекта появляется виджет Unity. На этом этапе это фактически пустой объект.

Рис. 6. Простой GameObject

GameObject имеет свойства Name, Tag (аналог тега text, присваиваемого через FrameworkElement.Tag в XAML или тегу в Windows Forms), Layer и Transform (пожалуй, это свойство самое важное).

Свойство Transform определяет позицию, поворот и масштаб любого GameObject. Unity использует левостороннюю систему координат, в которой координаты на экране компьютера рассматриваются как X (по горизонтали), Y (по вертикали) и Z (глубина, т. е. входящие или исходящие из экрана).

В разработке игр весьма распространено использование векторов, о которых я подробнее расскажу в следующих статьях. А пока достаточно сказать, что Transform.Position и Transform.Scale являются объектами Vector3. Vector3 — это трехмерный вектор; иначе говоря, в нем не более трех точек: только X, Y и Z. Манипулируя этими тремя простыми значениями, вы можете задавать местонахождение объекта и даже перемещать его в направлении вектора.

Свойство Transform определяет позицию, поворот и масштаб любого GameObject.

Компоненты

Вы добавляете функциональность к объектам GameObject добавлением компонентов (объектов Component). Все, что вы добавляете, — это Component, и все они показываются в окне Inspector. Существуют компоненты MeshRender и SpriteRender, компоненты для звука и функционала камеры, компоненты, относящиеся к физике (коллайдеры [colliders] и твердые тела [rigidbodies]), системы частиц, системы поиска пути, сторонние пользовательские компоненты и др. Чтобы назначить код какому-то объекту вы используете скриптовый Component. Компоненты — это как раз то, что оживляет ваши GameObject добавлением функциональности подобно шаблону Decorator в разработке ПО, только их возможности гораздо интереснее.

Я присвою кое-какой код новому GameObject, в данном случае простому кубу, который можно создать через GameObject | Create Other | Cube. Я переименовал куб в Enemy, а затем создал еще один куб. Как видно на рис. 7, я сместил один куб на –15 единиц от другого, что можно сделать с помощью инструмента Move на панели инструментов или нажатием клавиши W после выделения объекта.

Рис. 7. Текущий проект с двумя кубами

Код — простой класс, который находит игрока и перемещает к нему своего владельца. Обычно операции перемещения осуществляются одним из двух способов: либо вы перемещаете объект в новую позицию на каждом кадре, изменяя его свойство Transform.Position, либо вы применяете к нему физический толчок, а в остальном полагаетесь на Unity.

Покадровые операции требуют несколько иного образа мышления, чем просто «переместить в эту точку». Для этого примера я намерен немного смещать объект на каждом кадре, чтобы иметь точный контроль над тем, куда он движется. Если вас не прельщает перспектива работы с каждым кадром, существуют библиотеки, выполняющие покадровые перемещения всего одним вызовом функции, например бесплатная библиотека iTween.

Первым делом я щелкаю правой кнопкой мыши в окне Project, чтобы создать новый скрипт на C# с именем EnemyAI. Для назначения этого скрипта объекту я просто перетаскиваю файл скрипта из представления проекта на объект в представлении Scene или Hierarchy, и этот код связывается с объектом. Остальное берет на себя Unity. Вот так просто.

На рис. 8 показан куб Enemy с назначенным ему скриптом.

Рис. 8. Enemy со связанным скриптом

Взгляните на код на рис. 9 и обратите внимание на открытую переменную. Если вы смотрите на код в Editor, то заметите, что моя открытая переменная появляется с параметром для переопределения значений по умолчанию в период выполнения. Это очень удобно. Вы можете менять значения по умолчанию в GUI для элементарных типов, а также можете предоставлять открытые переменные (но не свойства) многих других объектных типов. Если я перетаскиваю этот код на другой GameObject, создается совершенно отдельный экземпляр этого компонента кода. Это базовый пример, и его можно расширить, добавив, скажем, компонент RigidBody к этому объекту, но я не стану усложнять пример.

Лучшие движки для создания собственных 2D инди-игр

Создавать игры сложно. Чем больше вы знаете об этом процессе, тем сильнее вы будете удивляться тому, что кто-то действительно доводит его до конца. Как говорил один из бывших авторов PC GamerТом Фрэнсис, описывая процесс программирования игры Gunpoint: «За время работы над игрой я пришёл к одному выводу: Моя игра – это настоящее безумие. Это пациент психлечебницы. Она полностью сошла с ума, и нужно быть готовым к тому, что все разумные доводы будут встречены невменяемым кричащим бредом».

Легко впасть в ступор при одной мысли о масштабе работы, которую придётся проделать, разрабатывая дизайн и программируя свою игру, однако мы обратились к нескольким независимым разработчикам, и все они дали один и тот же совет новичкам: просто сделайте это. Погрузитесь в работу с головой, какой бы страшной она ни казалась. Для того, чтобы помочь вам сделать первый (пугающий, но, в конечном счёте, оправдывающий средства) шаг, мы подготовили список 2D-движков для начинающих игровых разработчиков. Надеемся, что он вкупе с рекомендациями опытных геймдизайнеров будет вам полезен.

GameMaker Studio 2

Стоимость лицензии: 100 долларов для ПК-версии; доступен бесплатный пробный период

Подойдёт для: коротких 2D-платформеров и RPG; кроссплатформенных игр

Примеры игр: Nidhogg, Hyper Light Drifter, Undertale, Risk of Rain

GameMaker Studio 2 – это ваша первая остановка на пути в мир геймдизайна. Данная платформа включает в себя удобные в использовании инструменты, интерфейс формата drag-and-drop и возможность писать на отдельном языке программирования под названием GML. Мы поговорили с разработчиками, создавшими на движке GameMaker ряд популярных игр, и попросили поделиться опытом работы.

Плюсы

Марк Эссен, автор игр Nidhogg и Nidhogg 2, говорит, что GameMaker отлично подходит для новичков, так как система создания скриптов в нём максимально проста и понятна, к тому же на портале Yoyo Games можно найти собрание руководств и гайдов по данной теме. В интернете также немало дополнений для движка, позволяющих кастомизировать его для создания платформера или RPG с видом сверху.

Алекс Престон, создавший Hyper Light Drifter, говорит, что коммьюнити движка GameMaker оказывает неоценимую помощь новичкам. Он отмечает, что начинающим разработчикам следует «…наладить связь с сообществом разработчиков и изучить все инструменты движка, чтобы добиться того, чего нужно – а для этого стоит обращаться за советами к бывалым разработчикам».

Минусы

Разумеется, у вас вряд ли получится сразу же создать игру, которую можно опубликовать в Steam. «Из-за того, что GameMaker проста в использовании, проекты очень часто получаются несбалансированными», говорит Эссен. «Мне нравится, что на начальных стадиях разработки можно быстро обрисовать скелет своей игры и сосредоточиться на её дизайне, однако в дальнейшем это может выйти боком, особенно если вы не придерживаетесь организационных стандартов!»

Дункан Драммонд, автор всеми любимой Risk of Rain, тоже подчёркивает, что простота использования GameMaker может стать ночным кошмаром разработчика. «На движке можно быстро создать игру, но если проглядеть на ранних этапах своих ошибки, то позднее это выльется в увеличении затрат на игру», говорит он. Драммонд отмечает, что специфика работы с GameMaker сильно отличается от работы с другими движками, поэтому если в дальнейшем вы планируете перейти на Unity или любой другой движок, то вам, скорее всего, лучше поискать иной вариант.

Советы для новичков

«Не забывайте удалять свои старые работы! Чем чаще вы начинаете игру с нуля, тем опытнее по части геймдизайна вы становитесь», — Марк Эссен, Nidhogg

«Просто начните! Запустите движок, почитайте руководства и приступайте к работе, даже если у вас толком не получается. Чем больше ошибок совершите, тем больше уроков вы вынесете», — Алекс Престон, Hyper Light Drifter

«Не бойтесь начать! Это интересный и относительно простой способ разработки, и тратит он разве что ваше время», — Дункан Драммонд, Risk of Rain

Unity

Стоимость лицензии: Бесплатный стартовый пакет, 35 долларов в месяц за пакет Unity Plus, 125 долларов в месяц за пакет Unity Pro

Подойдёт для: практически любой инди-игры

Примеры игр: Ori and the Blind Forest, Galak-Z, West of Loathing, Cuphead


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

На официальном сайте Unity можно найти и специальные дополнения, позволяющие кастомизировать движок для разработки 2D-игр. К примеру, бесплатное расширение 2D Platformer или инструменты вроде Corgi Engine и Rex Engine, предлагающие игровую физику, управление и особенности, заточенные специально под платформеры.

Мы поговорили с Джозефом Хамфри из inkle и Виктором Томпсоном из Asymmetric Publications, которые рассказали о своём опыте работы с Unity.

Плюсы

Томпсон, ранее создававший игры классическим способом, быстро стал поклонником Unity – движка, на котором была создана недавно вышедшая игра его компании под названием West of Loathing. «После 2-3 лет работы с движком больше всего меня радует то, насколько быстро можно совмещать концепты и прототипы», говорит он. «Я использовал множество различных движков – как небольшие для своих собственных проектов, так и крупные для разработки AAA-игр, однако Unity – это пока что лучший из всех движков, что я видел, так как он позволяет мне быть наиболее продуктивным».

Минусы

Впрочем, если вы собираетесь использовать одну платформу для всех своих разработок, вы столкнётесь с определёнными ограничениями. Если вы найдёте баг в Unity, вам придётся ждать, пока авторы движка его исправят, и это не всегда быстро. «Несмотря на то, что представители движка заявляют, что исправление багов является их важнейшим приоритетом, разработчики компании inkle по-прежнему считают стабильность дебаггинга одной из главных проблем движка», говорит Хамфри.

Советы для новичков

«Прежде всего, постарайтесь создать в голове конечный образ игры и сфокусируйтесь на нём – вашей конечной целью должен быть не опыт, полученный в процессе, а готовый продукт. Конечно, полезно вынести пару уроков из неудач, но, как мне кажется, намного важнее задаться целью, изучить всё, что необходимо для достижения этой цели, и в итоге реализовать задуманное», — Виктор Томпсон, West of Loathing

Ren’Py

Стоимость лицензии: Бесплатно

Подойдёт для: 2D визуальных новелл, симуляторов

Совместим с: Python

Примеры игр: Long Live the Queen, Analogue: A Hate Story

Ren’Py – это простой в освоении движок с открытым исходным кодом. И хотя он требует начальных навыков программирования, на самых ранних этапах вам понадобится лишь умение работать с текстовым редактором и приложениями по редактированию фотографий. Это удобная стартовая площадка для тех, кто в будущем планирует изучить язык программирования Python.

Джорджина Бенсли, автор Long Live the Queen, говорит по поводу Ren’py следующее.

Плюсы

«Открытый исходный код Ren’Py и его кроссплатформенность дают множество возможностей для всех пользователей движка», говорит Бенсли. «Я также считаю плюсом тот факт, что движок рассчитан на новичков, но при этом требует вносить правки в программный код игры. Это лучше, чем графический drag-and-drop интерфейс, так как это показывает, что в программировании нет ничего страшного».
Ren’Py подойдёт вам в том случае, если вас пугает сама перспектива создания игры с нуля:

«Одно из важнейших препятствий, с которым сталкивается большинство людей, ранее не работавших над созданием игр, заключается в их уверенности в том, что программирование – это нечто “слишком сложное”, а потому это попросту им не по силам. А данный движок позволяет быстро и успешно создать простую игру, что придаёт уверенности начинающим разработчикам, даже если они и не планируют в будущем выпускать одни лишь визуальные новеллы. Как только ты создаёшь нечто, во что могут играть другие, пусть даже простенький проект, ты уже не ставишь под сомнение свои способности».

Минусы

Ren’Py немного ограничен по части графических и геймплейных функций. Если вы намерены создавать игры с 3D, Live2D, системой повреждений и другими особенностями, то вам стоит поискать другие варианты.

Советы для новичков

«Не бойтесь проб и ошибок; начать намного проще, чем вы думайте. Не стесняйтесь просить о помощи – в сети можно найти множество людей, которые уже прошли через это и готовы поделиться советами, или тех, кто присоединится к вашему проекту в качестве соавтора. Озвучивайте свои проблемы и ищите способы их решения, и не думайте, что это невозможно».

Стоимость лицензии: Бесплатно

Подойдёт для: текстовых приключенческих игр

Совестим с: Unity, C#, HTML

Примеры игр: 80 Days, Sorcery!

Ink – это хорошее бесплатное дополнение для Unity, если вы хотите разбавить свою игру диалоговыми ветками и расширенным повествованием. Его легко освоить, в нём не используется продвинутый код, и он бесшовно интегрируется с Unity. Как говорит создатель ink Джозеф Хамфри, данный движок является «промежуточным» — после создания скрипта в ink его можно перенести в более крупную игру на движке Unity. Тем не менее редактор Inky Editor позволяет также создавать веб-игры.

Плюсы

Создание масштабного сценария со множеством диалоговых веток может быстро превратиться в запутанную кашу, поэтому ink поможет вам не потеряться в процессе. «Авторы игр могут использовать инструменты движка для создания диалогов и текста в формате удобного интерактивного сценария с ключевыми метками», говорит Хамфри. «Затем движок ink, запущенный внутри Unity, сможет читать эти сценарии и выводить текст на экраны уже в самой игре».

Открытый исходный код играет важную роль в разработке амбициозных проектов. Хамфри отмечает, что «создаваемый на движке ink текст необязательно должен показываться в виде текста. К примеру, в игре Heaven’s Vault движок ink создаёт динамичный сценарий, который интерпретируется самой игрой в виде интерактивной графической новеллы с приключенческими элементами».

ink также является отличным инструментом для тех, кто больше заинтересован в написании сценариев для игр, а не о чистом программировании. «…Количество сценаристов, использующих ink для написания интерактивных историй, постоянно растёт», добавляет Хамфри. «Where The Water Tastes Like Wine – это один из таких примеров. Её создали авторы игры Gone Home при помощи движка ink. Над игрой работали такие известные сценаристы, как Ли Александр, Эмили Шорт и Кара Эллисон. Поэтому если вам нравится сочинять сценарии и вы интересуетесь разработкой игр, то ink может стать отличной площадкой для начала».

Минусы

ink лучше всего использовать для игр, разрабатываемых на движке Unity. Хамфри говорит, что «ink не является альтернативой Unity — это скорее дополнение. Более того, ink – это единственный инструмент для создания интерактивных сценариев, который был намеренно создан в виде промежуточного звена».

Советы для новичков

«У меня есть один-единственный совет – просто попытайтесь создать демо-игру. Если же вы хотите заполнить своё портфолио, в котором указаны примеры того, в чём вы хороши, то самое время начать заполнять его. Создавайте эти примеры!»

RPG Maker и другие движки

В начале 2020 года мы писали о внезапном появлении RPG Maker на площадке Steam и о том, как движок стремительно набирает популярность среди начинающих инди-разработчиков. Но есть и другие инструменты, на которые стоит обратить внимание:

HaxeFlixel с открытым исходным кодом и кроссплатформенностью.

Stencyl – инструмент для создания игр без использования программирования.

Советы по выбору игрового движка от генерального продюсера AminiLab Ильи Пшеничного

Генеральный продюсер компании AminiLab Илья Пшеничный, занимающийся разработкой игр последние 13 лет, написал для подраздела Unity колонку о том, как выбрать подходящий игровой движок для проекта.

Несмотря на название статьи и на раздел, в котором она опубликована, мы постараемся избежать напрашивающихся выводов.

Чтобы развеять сомнения почтенной аудитории в том, стоит ли прислушиваться к мнению, изложенному в статье, могу сразу сказать, что можете и не прислушиваться. Но мы предупреждали.

Статья написана на основе почти 15-летнего опыта разработки видео-, компьютерных, мобильных игр под широкий спектр платформ — начиная с PlayStation 2 и Nintendo DS и заканчивая Android и iOS, с использованием различных движков и технологий — Unreal Engine, Unity, Cocos, Ignite, Gamebryo, CreatEngine, Xamarin, Fire Engine, Renderware и так далее.

Означенный опыт включает в себя как известные проекты вроде FIFA, NHL, Sims, Alone in the Dark, так и менее известные и успешные (а временами и совсем неизвестные и неуспешные).

Кстати, если вы собираетесь делать «2048» или похожую игру, можете дальше не читать. Используйте любой движок или технологию, которая вам нравится.

О чём пойдет речь

В рамках статьи мы не будем затрагивать такие интересные темы, как:

  • в каком движке лучше реализован шейдер воды;
  • как там дела с deferred shading;
  • сколько полигонов отрендерить;
  • и подобные.

Мы не считаем эти вопросы сколько-нибудь важными при выборе движка для подавляющего числа проектов и, если вы поднимаете их в своих обсуждениях, то рекомендуем вам крепко задуматься.

Не считаем мы их важными по той причине, что при выборе движка надо в первую очередь думать о конечной цели. А конечной целью является выпуск коммерчески успешного проекта(ов) — то есть такого проекта, полученная прибыль с которого превысит прямые и непрямые затраты на его производство и поддержку в обозримый срок.

Критерии выбора движка должны быть именно такими — позволит ли он выпустить тот самый проект, того самого уровня качества, в тот самый срок. Заметим, что срок играет важную роль, так как игровой рынок меняется всё быстрее.

При выборе движка мы настоятельно рекомендуем не отталкиваться от аргументов вида «Это опенсорс», «Лёгкий движок, если что, поправим сами», «Новая технология! Хэтэмэель5 вебжэль, будет работать и в браузере, и на FirefoxOS». Вместо этого предлагаем оперировать аргументами «У ведущего художника двое детей и они хотят есть» или «У продюсера банк отберет ипотечную квартиру, если проект не выйдет в срок и не заработает денег».

Так что же такое игровой движок

(Неплохой вопрос на собеседовании, кстати.)

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

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

Если вы уже делали хоть сколько-нибудь сложные игры, то знаете, что большую часть трудозатрат занимает не задача «давайте отрендерим модельку», а труд художников (2D, 3D, аниматоров. ), геймдизайнеров, а также программистов, борющихся с системой — файловой, сетью, покупками, асинхронностью и так далее. И если ваши сотрудники вместо того, чтобы делать крутую игру, которая заработает денег, борются с системой, неудобным инструментарием, медленным пайплайном, невозможностью быстро увидеть результат своей работы и итерироваться — то технология, которую вы выбрали — не движок, а просто набор библиотек.

Так как же выбрать

Наконец приведем те критерии, которые считаем нужно использовать при выборе игрового движка.

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

Во-первых, на выбранном движке должно быть принципиально возможно сделать игру, которую вы придумали. К примеру, вы хотите делать 3D-игру, значит, движок должен поддерживать 3D-пайплайн. И, конечно, работать на выбранной целевой платформе (этого подробнее коснемся ниже).

Во-вторых, богатство инструментария и полнота областей, «закрываемых» движком — работа с магазинами приложений, рекламными сетями, клиент-сервер, ввод-вывод и так далее. Всё это определяет стоимость производства, поддержки и развития вашей игры. Помните, что каждый раз, когда вам приходится решать проблемы с неподдерживаемым форматом текстур, неудобным редактором анимаций, протаскиванием гейм-дизайнерских таблиц с настройками в билд, работой с SD-картой — вы каждый раз крадете деньги у самих себя.

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

В четвертых, доступность кадровых ресурсов на рынке труда и «троллейбусный коэффициент». Насколько технология уникальна и насколько сложно найти специалистов на рынке. Что будет с проектом или компанией, если заболеет или уволится технический директор или главный технический художник?

Наконец, общая известность и распространённость технологии. Большое ли коммьюнити? Много ли игр сделано на этом движке? А игр выбранного вами жанра? Как работает служба поддержки?

Последние два пункта, к примеру, говорят о практической непригодности для разумного использования такого, движка (вне всяких сомнений), как CryEngine, просто в силу того, что риски, сопряжённые с разработкой на нём, слишком велики (если вас не спонсирует Crytek).

А первые пункты говорят о том, что многие технологии — ни разу не движки, а просто технологии. И использовать их для проектов размером от среднего и выше мы бы не советовали.

Кстати, о популярном критерии — «кроссплатформенности». Важность этого критерия заметно преувеличена. Если мы говорим о кроссплатформенности в рамках мобильных операционных систем — ок. Или в рамках консолей PlayStation и Xbox.

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

Критерий стоимости тоже уже отошел на второй план — прошли те времена, когда один известный движок стоил $1 млн, сейчас большинство движков стоят сравнимых денег и предлагают гибкие условия лицензирования.

Что же в сухом остатке

Говоря о проектах для мобильных платформ или ПК размерами средний и выше, выбор движков не такой и широкий. По большому счёту, это или Unity, или Unreal Engine.

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

Подробнее остановимся на каждом из них.

К плюсам Unity можно отнести:

  1. Сравнительную плавность кривой вхождения, хороший игровой редактор и инструментарий. В принципе, за пару дней базовые вещи может освоить любой желающий. Есть множество видеоуроков и прочей документации.
  2. Большое коммьюнити, множество выпущенных проектов во всех жанрах.
  3. Asset Store — внутренний магазин, в котором разработчики могут покупать для своих проектов готовые куски кода, реализующие ту или иную функциональность (к примеру, работу с системными лидербордами или ачивками) или художественные и звуковые ассеты (а также всё вместе).

Важность Asset Store сложно переоценить. Использовать его ассортимент можно по-разному, не только покупая готовую подсистему и встраивая ее as is, тем более, что далеко не всё, представленное там, обладает высоким качеством. Но вот купить за $5-$20 кусок кода, в который можно подсмотреть, как в пример, или набор визуальных спецэффектов, а потом переделать их под себя — это очень облегчает жизнь. Особенно, если надо быстро что-то запрототипировать.

К минусам Unity отнесем:

  1. Закрытость. В обычных условиях у разработчиков нет доступа к исходному коду движка, нет возможности что-то исправить или улучшить на системном уровне, приходится ждать, когда это сделают (если сделают) инженеры Unity.
  2. Отсутствие хорошего track-record выпущенных ААА-тайтлов. Те разработчики, которые делали или пытались делать ААА на Unity, сталкивались с большим количеством одинаковых проблем (об этом, кстати, недавно упоминали на одной из лекций на DevGamm Moscow).
  3. Отсутствие хорошего track-record выпущенных консольных тайтлов.

Повернемся к Unreal Engine. Его сильные стороны:

  1. Вот на нем AAA и консоли делать можно, что доказано большим пулом выпущенных ААА-проектов (хоть и схожих жанров)
  2. Возможности редактора. У Unreal Engine очень качественный редактор, обладающий очень богатой функциональностью, а также система визуального «программирования» с помощью Blueprints. В качестве примера приведу такой случай: на одном из проектов, который мы делали на Unreal Engine, мы расстались с программистом, отвечавшим за графику и рендер за банальной ненадобностью. Художники отлично справлялись самостоятельно со сборкой «из кирпичиков» любых нужных им шейдеров.
  3. Движок поставляется с полным доступом к исходному коду. Берите, правьте, отлаживайте, если необходимо. Можно даже исправления засылать обратно в Epic, и, если они сделаны хорошо и действительно важные, то их включат в следующий релиз.

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

Но есть у Unreal Engine и слабые стороны

  1. Порог входа. Ребята из Epic прикладывают большие усилия, чтобы его снизить, но он всё равно достаточно высок, особенно если вы собираетесь делать что-то серьёзное.
  2. Слабый Asset Store. По сравнению с тем, что есть у Unity, в магазине Unreal Engine нет почти ничего. Ситуация постепенно исправляется, но сейчас она пока ещё такая.
  3. Меньшая распространённость, особенно на постсоветском пространстве.

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

Но если вы решили написать свой «универсальный» движок, или адаптировать свой текущий движок для match-3 до «универсальности», то мы очень не рекомендуем вам этого делать. Такой подход был оправдан лет 10 назад, когда с движками дело обстояло значительно хуже, но сейчас вы, вместо того, чтобы делать крутую игру, будете тратить бюджет компании и время, которое не вернуть, на то, что давно и хорошо сделано до вас и предлагается практически бесплатно в любом хорошем движке.

Ну и, наконец, небольшое резюме.

Основываясь на вышеизложенном, выглядит разумным среднеразмерные проекты делать на Unity, а если вы замахнулись на что-то больше, то внимательно посмотрите на Unreal Engine.

Выбор движка — занятие интересное, но не забывайте, что результат имеет весьма большое влияние на будущее проекта или всей компании. Хорошо, когда есть время и деньги эксперементировать, выпускать разные проекты на разных технологиях, сравнивать результаты и писать постмортемы. Если такой возможности нет, то наша рекомендация — максимально снижайте риски своего бизнеса или проекта.

Игры — и так очень непредсказуемая область. Сосредоточтесь на пользовательском опыте своих игроков, а о пользовательском опыте ваших сотрудников пусть позаботятся профессионалы.

Давайте делать хорошие игры.

Если вы работаете на технологии Unity, хотите рассказать о своём опыте разработки или задать вопрос экспертам — оставьте заявку нашим менторам с помощью специальной формы.

Добавить комментарий