Введение

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

Требования

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

Обязательные к приобретению

Разумная скорость разработки

Как разработчику, возможно, одному, мне нужен набор инструментов, который сделает меня достаточно продуктивным. Теоретически я мог бы проводить достаточно времени, не зарабатывая денег, если бы я жил скромно, но лучше думать о разработке игр как о бизнесе, а не просто о страсти. Я мог бы заниматься другими вещами (разработка веб-приложений, мобильных устройств или серверной части), а это означает, что альтернативные издержки высоки, поэтому в ближайшее время важно будет заработать немного денег.

Возможна поддержка любой платформы

Я считаю, что это очень важно для независимых разработчиков (даже не только для разработчиков игр, но и для любых независимых разработчиков). Если вы сможете разнообразить свой бизнес, перенеся свои игры (или продукты/услуги) на несколько платформ, у вас будет больше шансов выжить.

Приятно иметь

Гибкость

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

Низкие первоначальные инвестиции

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

Производительность

Никто не хочет, чтобы их игры работали со скоростью 20 кадров в секунду, верно?

Доступ к нижнему уровню

Даже если я не хочу постоянно иметь дело с низкоуровневыми вещами, важно иметь возможность доступа к низкоуровневым API, если это необходимо (например, для устранения узких мест в производительности или особых требований).

Хорошая экосистема

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

Разработка для нескольких ОС

Я еще не решил, какой будет мой следующий ноутбук для работы, поэтому было бы неплохо, если бы мои инструменты разработки были доступны для трех основных ОС: Windows, Mac, Linux, особенно для первых двух.

Проверено в боевых условиях

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

Здоровое будущее

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

Цены

Не так уж и сложно, если инструмент экономит ваше время, но все же важно.

Не нужно

Потенциально все может быть полезно, но нужно где-то отрезать при принятии решения. Мне определенно не нужны 3D-функции для игр, которые я хочу сделать, поэтому я не буду их учитывать.

Кандидаты

Я исследовал довольно много движков, фреймворков, библиотек и языков программирования для разработки игр. Тем не менее, я хотел предварительно выбрать только пару инструментов, чтобы не слишком долго принимать решение, поэтому я выбрал те, которые «выглядели лучше» (большое сообщество, лучше подходящие для создания игр, разработанные крупной компанией и т. д.). ). Это те:

  • Единство
  • Годо
  • МоноИгра
  • Любовь2D
  • Пользовательские инструменты

Первый раунд: Must Have’s

Сначала я сосредоточусь на Must Have, чтобы отбросить варианты, которые не соответствуют минимальным требованиям. Пройдемся по всем пунктам.

Скорость разработки

Единство

  • Является игровым движком с полнофункциональным редактором. Unity фокусируется на производительности разработчиков, предоставляя множество функций и хранилище ресурсов.
  • В качестве языка программирования используется C#, что является хорошим компромиссом между скоростью и производительностью.

Годо

  • Похож на Unity, но имеет гораздо меньшее хранилище ресурсов. Наоборот, я обнаружил, что работать с Godot проще, с более приятным редактором, более ориентированным на 2D и с использованием языка, похожего на Python, что делает разработку довольно быстрой.

Моноигра

  • Это фреймворк, который делает для вас меньше, чем такие движки, как Unity. Это все еще достаточно высокий уровень, чтобы все работало быстро, поскольку он обрабатывает для вас такие вещи, как рендеринг, звук или ввод.
  • Он не предоставляет редактора, кроме инструмента Content Pipeline для управления активами.
  • Использует С#.

Любовь2D

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

Пользовательские инструменты: SDL2 + низкоуровневые API (OpenGL, Vulkan, Metal, консольные)

  • SDL2 — это низкоуровневая библиотека для обработки графики, звука и ввода. Он предоставляет вам меньше готовых утилит по сравнению с фреймворком. У него есть привязки для нескольких языков, но я рассматривал только C++ и Rust, так как низкоуровневый подход имеет смысл, если используется правильный язык системного программирования без сборщика мусора (поэтому я не включаю сюда C#). .
  • C++: язык программирования, являющийся отраслевым стандартом. Он генерирует наиболее производительный код. Впрочем, даже со всеми последними улучшениями стрелять с ноги по-прежнему довольно легко. Кроме того, управление зависимостями и сборками является проблемой по сравнению с другими языками.
  • Rust: как язык программирования он мне нравится намного больше, чем C++. Мало того, что есть cargo, который упрощает управление зависимостями и сборки, но также помогает вам писать параллельный и безопасный для памяти код, который генерирует одни из самых серьезных ошибок, которые могут быть в игре. Я не рассматривал Rust + существующие движки, так как они еще очень молодые.

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

Как бы мне ни нравилось низкоуровневое программирование, и оно дает мне столько гибкости, идти по этому пути, вероятно, было бы неразумно для разработчика-одиночки, которому нужно создавать свою собственную технологию с нуля. В частности, с Rust кажется, что вы идете по пути, который все еще слишком смел, поскольку он все еще немного молод и не получил широкого распространения в игровой индустрии. Я действительно хочу в конечном итоге использовать Rust для разработки игр, но я должен быть честным с самим собой и понимать, что с ним я не буду продуктивным по сравнению с другими альтернативами. Может быть, через несколько лет мои чувства будут другими. Даже использование C++ потребовало бы много работы поверх низкоуровневых библиотек. Я мог бы пересмотреть это в будущем, особенно если я столкнусь с какими-либо плохими препятствиями во время своих первых игр.

Поддержка платформ

Единство

  • Поддерживает все основные платформы (настольные, мобильные, консоли), а также множество других платформ.

Годо

  • Поддержка настольных и мобильных устройств из коробки. Он не включает экспорт для консолей, но движок написан на C++ и имеет открытый исходный код, так что ничто не помешает вам использовать нативные API.

Моноигра

  • Поддерживает настольные, мобильные и все основные консоли. Однако для интеграции с консолями необходимо поговорить с сопровождающими MonoGame, поскольку NDA не позволяет включать их в проект с открытым исходным кодом. Я не пробовал их лично, но я вполне уверен, что интеграция хороша.

Любовь2D

  • Поддерживает настольные и мобильные устройства (хотя это не так просто). Он не поддерживает консоли. Сам движок написан на C++, а это значит, что вы потенциально можете добавить поддержку консолей. Однако основным языком программирования для разработчика является Lua, что подразумевает написание привязок (дополнительная сложность).

Пользовательские инструменты: SDL2 + низкоуровневые API (OpenGL, Vulkan, Metal, консольные)

  • C++: это лучший язык для взаимодействия с низкоуровневыми API, так как код обычно написан на C.
  • Rust: можно вызывать код C из Rust. Требует жестких креплений.

Все варианты либо поддерживают множество платформ из коробки, либо имеют свой исходный код, а это значит, что можно было добавить поддержку недостающих (в основном консолей). Однако такие языки, как Lua или Rust, требуют написания привязок, что означает дополнительную сложность и работу.

Как бы мне ни нравился love2d (мой любимый инструмент для прототипирования), ему нужно немного поработать над инструментами экспорта. Использование низкоуровневого подхода с C++ или Rust также потребует добавления поддержки некоторых платформ (в основном консолей).

Вывод

Пока что единственными вариантами, которые соответствуют этим двум требованиям, являются Unity, Godot и MonoGame. Тем не менее, я оставлю свои варианты для Rust открытыми в будущем, если экосистема улучшится и получит более широкое распространение, и я смогу позволить себе потратить время на переход.

Второй раунд: приятно иметь

На данный момент есть 3 подходящих варианта. Однако некоторые из них предложат более интересные преимущества, чем другие. Давайте посмотрим на все пункты.

Гибкость

Единство

  • Как и в любом движке, вам нужно, чтобы ваш код подходил для него. Это означает, что вы теряете гибкость при написании кода.
  • Поддерживается только C#.
  • Unity является собственностью, а исходный код доступен только для чтения. Вы не можете изменить его или отправить запрос на включение, чтобы исправить проблемы или адаптировать его к вашим потребностям.

Годо

  • Будучи движком, он страдает от той же проблемы, что и Unity, с точки зрения того, как вы должны писать свой код.
  • C++ и GDScript являются основными языками, но также поддерживаются C# и Visual Scripting. Существуют неофициальные привязки для других языков, таких как Python или Rust.
  • Это с открытым исходным кодом.

Моноигра

  • Будучи фреймворком, он не диктует, как вам нужно писать код.
  • Поддерживается только C#.
  • Это с открытым исходным кодом.

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

Низкие первоначальные инвестиции

Единство

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

Годо

  • То же, что и Unity, хотя Godot проще.

Моноигра

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

MonoGame кажется проще в освоении, так как она меньше. Хотя вы можете начать с базовых вещей в Unity или Godot и изучать новые функции по мере необходимости.

Представление

Единство

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

Годо

  • Написан на C++, что обычно означает хорошую производительность.

Моноигра

  • Это сложно сказать. Как и Unity, он использует C#, который может быть медленным, особенно если сборщик мусора запускается в неудобное время.

Я недостаточно проверял эту область, но чувствую. Все три варианта должны подойти, особенно для 2D-игр.

Доступ к низкоуровневому

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

Единство

  • Можно выбрать используемый графический API (DirectX, OpenGL, Metal). Однако код закрыт, а значит, в лоу-уровень в некоторых ситуациях зайти нельзя.

Годо

  • То же, что Юнити. По крайней мере, исходный код доступен и может быть адаптирован под наши нужды.

Моноигра

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

MonoGame предлагает лучший контроль над низкоуровневыми функциями.

Хорошая экосистема

Единство

  • Магазин активов полон полезных утилит для разработчиков, некоторые из них бесплатны.

Годо

  • Не такое хорошее хранилище активов, как Unity.

Моноигра

  • В нем есть несколько инструментов, построенных вокруг основного фреймворка MonoGame, но, вероятно, их не так много по сравнению с Unity.

Здесь Unity превосходит Godot и MonoGame.

Разработка на более чем одной ОС

Единство

  • Можно использовать на Windows и Mac.

Годо

  • Может использоваться на Windows, Mac и Linux.

Моноигра

  • Может использоваться на Windows, Mac и Linux. Кроме того, основные инструменты (Visual Studio и Content Pipeline) работают со всеми тремя.

Unity изначально не работает в Linux, хотя Windows и Mac, вероятно, были бы моим выбором для разработки игр.

Проверено в боях

Единство

  • У него, безусловно, самое большое количество хитов и успешных игр, созданных с его помощью.

Годо

  • Пока не так много успешных игр, созданных с помощью Godot. Хотя я думаю, что это будет делом времени.

Моноигра

  • Вместе с MonoGame поставляется несколько очень успешных инди-игр.

И у MonoGame, и особенно у Unity есть крупные инди-игры. На момент написания этого сообщения в блоге я не был так уверен в Годо.

Здоровое будущее

Единство

  • Единство кажется неудержимым. Это, вероятно, наиболее часто используемый инди-инструмент.

Годо

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

Моноигра

  • Этот фреймворк поддерживается парой человек, что делает его более «хрупким» из 3-х оставшихся вариантов. Тем не менее, MonoGame начиналась как замена XNA (которая была оставлена ​​Microsoft), а открытый исходный код дает мне уверенность, что кто-нибудь подхватит ее, если она перестанет поддерживаться.

Похоже, у Unity большое будущее. И Godot, и MonoGame имеют открытый исходный код и хорошее сообщество, поэтому они должны быть относительно безопасными.

Цены

Единство

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

Годо

  • Бесплатно

Моноигра

  • Бесплатно

Вывод

Для финального раунда я хотел бы выбрать два разных варианта: игровой движок и фреймворк. Структура довольно ясна (MonoGame). Из двух игровых движков Unity кажется более зрелым. Godot лучше подходит для 2D, но я обнаружил проблемы с физическим движком, которые меня обеспокоили и заставили меня потерять к нему доверие. Кроме того, Unity использовался для больших игр, а это резюме, которого у Godot еще нет.

Другие инструменты

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

UnrealEngine 4, пожалуй, лучший 3D-движок. Но, поскольку я собираюсь работать над 2D-играми, это не совсем преимущество, и его 2D-функции не на одном уровне. Кроме того, это сложнее, чем Unity.

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

Окончательный выбор

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

Единственный протестированный инструмент с открытым исходным кодом из приведенного выше списка, который соответствует моим требованиям, — это MonoGame, который использовался для выпуска таких игр, как Towerfall, Celeste или Fez. В целом, я думаю, что это хороший компромисс для программистов, которые не хотят ограничивать себя тем, что диктует движок, но не хотят переходить на самый низкий уровень, который требуется SDL, OpenGL, Vulkan и т. д. Кроме того, это открытый исходный код, что может быть большим преимуществом (возможность самостоятельно исправлять ошибки, адаптировать его под свои нужды, поддерживать новые платформы, не дожидаясь официального релиза и т. д.). Даже используемый им язык C# представляет собой хороший компромисс между скоростью разработки и производительностью, особенно для 2D-игр.

Я выясню, является ли MonoGame лучшим выбором, когда я сделаю с ней несколько игр. Если Unity станет открытым исходным кодом, все изменится, и я мог бы снова рассмотреть его в качестве своего первого варианта. Кроме того, как я уже упоминал ранее, я буду следить за Rust. Это очень многообещающий язык для замены C++, и в конечном итоге я хотел бы создать свою собственную технологию, чтобы иметь полный контроль, но я чувствую, что Rust еще не совсем готов, и также сейчас я должен сосредоточиться на создании игр, а не на технологиях. .

ПРИМЕЧАНИЕ (01.08.2019). Я подготовил этот пост к концу октября. Решил не редактировать, а оставить исходный пост и добавить пару замечаний. С тех пор я использую MonoGame и не оглядываюсь назад. У меня было несколько проблем на Mac (не очень хорошая IDE и некоторые проблемы с заиканиями), но на Windows все в порядке. Я все еще хотел бы больше играть с Unity, и я изучаю Rust в долгосрочной перспективе. Но на данный момент MonoGame дает мне ту степень контроля, на которую я рассчитывал, при этом сохраняя продуктивность, поэтому я пока придерживаюсь ее. Я также должен сказать, что разработчики были очень полезны, когда у меня были проблемы, это действительно ценно и, безусловно, бонус.

ПРИМЕЧАНИЕ (01.10.2019): Итак, у кого-то возникли проблемы с условиями использования Unity. Это то, что беспокоит меня больше всего и заставляет держаться подальше от хорошего инструмента. Если они станут более открытыми, я пересмотрю это. К сожалению, это пример опасений, описанных выше.

ПРИМЕЧАНИЕ (02.01.2019): Unity обновила свои Условия предоставления услуг несколько недель назад. Это хороший шаг к тому, чтобы стать более открытой платформой.

Первоначально опубликовано на srodrigo.me 11 января 2019 г.