Не UNIGINE едины
Есть идеи почему про него не кто не слышал и не использовал ?
Есть идеи почему про него не кто не слышал и не использовал ?
Чтобы создавать игры, нужно определиться с движком. Выбрать более подходящий под ваши потребности. Чтобы это было эффективно в отношении времени и ресурсов. Я разрабатываю игры давно и хочу помочь в выборе движка в этой статье.
Мне написало более 250 разработчиков инди игр, которые также делятся информацией на каком движке их игра была создана. Поэтому вместо 3-4 движков, как я изначально планировал, расскажу больше, т.к. они до сих пор активно используются.
Unreal Engine – движок для создания 3D игр с системой визуального программирования Blueprint, благодаря которой можно собирать прототипы без навыков программирования. Движок разработан Epic Games, которая также создала свой стор, чтобы конкурировать со Steam и разработали популярную игру Fortnite, не говоря уже о классике как Unreal Tournament и Gears of War. В официальном магазине движка часто появляются бесплатные ассеты – части игрового контента, которые можно использовать в коммерческих целях.
На данный момент последняя версия Unreal Engine 5. В ней появилась система Nanite, которая позволяет не беспокоиться об оптимизации ассетов под разные системы: движок все делает самостоятельно. Другая фича – эта технология Lumen, которая автоматически обрабатывает источники света. И самое крутое – это конструктор людей MetaHuman, который позволяет создавать реалистичных людей буквально в несколько кликов.
Это отличный движок подойдет тем, кто профессиональный программист. Не смотря на то, что есть визуальное программирование, чтобы сделать серьезный проект, без кода не обойтись.
Язык программирования C++.
Сам движок бесплатный, но при доходе от миллиона долларов за все время существования игры Epic Games забирает 5%.
Unity один из самых популярных движков. У движка огромное комьюнити и множество официальных и неофициальных гайдов, которые помогают создавать игры и решать многие проблемы. Также от самих создателей можно найти курсы, чтобы прокачать свои навыки.
Ограничений по созданию игр в Unity практически нет – можно создавать как простые инди игры, так и более сложные AAA проекты.
Unity подойдет для всех. Порог вхождения низкий благодаря встроенному магазину и инструментам визуального программирования, которые позволяют прорабатывать механику без написания кода.
У меня многие художники, которые не умеют особо программировать делали полноценные игры под мобилки и стим. Да я сам купил один ассет за $25, чтобы сэкономить свое время на программирование с нуля. В общем, это очень мощный инструмент для быстрого создания игр.
Язык программирования C#.
Godot – бесплатный движок с открытым исходным кодом как и в Unreal Engine.
Он поддерживает создание как 2D, так и 3D-игр. Вместо псевдо-2D, когда трехмерный мир представлен в двух измерениях, платформа работает в реальном 2D-пространстве, выраженном в пикселях – это значительно упрощает создание и оптимизацию 2D-игр.
Он идеально подходит для 2D-игр, имеет гибкую систему анимации объектов.
Язык программирования GDScript, также поддерживает C#, C++ и визуальное программирование.
GameMaker Studio также известный движок наравне с Unity и Unreal Engine. На нем сделано много инди игр и у него низкий порог входа, т.к. необязательно уметь программировать, а все взаимодействия можно легко настраивать простым перетягиванием элементов.
Но возможность программировать есть. Язык программирования GML, у него не так много возможностей, но легко начать программировать.
Есть интеграция со Steam, магазин ассетов и хорошая документация.
Но плохо реализован инструмент для создания 3D-игр.
Phaser 3 – один из самых популярных фреймворков для создания HTML-игр. Есть возможность рендера как на Canvas, так и на WebGL. На основе библиотек PixiJS созданные игры можно скомпилировать на iOS и Android.
Phaser имеет визуальный редактор MightyEditor, который упрощает разработку, а также инструмент Phaser SandBox, позволяющий экспериментировать с возможностями фреймворка или собственным кодом, а также сохранять ссылку для демонстрации проекта.
Но когда был тренд на html5 игры в 2015 и я активно их разрабатывал, то на тот момент я выбрал PixiJS вместо Phaser’а. Потому что я хотел именно программировать, а Phaser не давал мне нужной гибкости. Но тогда уже было видно, что фреймворк крутой и может удовлетворить потребности разработчиков, которые не сильны в программировании. До PixiJS я использовал CreateJS от Adobe, но в оптимизации этот движок мне показался хуже.
Фреймворк подойдет тем, кто хочет создавать web игры. Для портирование на мобилки, нужно будет использовать сторонние инструменты, что уже не очень.
Язык программирования JavaScript или TypeScript для добавления специальных фичей.
Движок для создания 2D игр под мобильные устройства, ПК и html5. Раньше он назывался Corona SDK.
Я создал множество игр на этом движке для мобилок и ПК. А вот на html5 так и не попробовал, потому что тогда уже активно использовал PixiJS, как говорил ранее. Даже в январе 2024 года я за неделю сделал игру для Steam на этом движке. О ходе разработки я писал каждый день в телеграм канале, кому интересно, можете посмотреть.
Язык программирования Lua, мой любимый раздолбайский язык. Это самый простой язык программирования, который я встречал. А я активно программировал еще на js, C#, as3 и solidity, ну и баловался на Delphi, C++, Visual Basic.
Движок уже несколько лет с открытым кодом. Комьюнити есть, оно живое, но его не так много. И я также в нем состою в одном из телеграм каналов. И сами разработчики движка до сих пор его поддерживают и могут ответить на вопросы или помочь в создании плагина.
В нем есть box2d для работы с физикой.
Подойдет для тех, кто хочет быстро сделать 2д игру для мобилки или ПК, но на консоли портировать не получится.
Defold – движок для создания 2D игр, которые также разрабтываются на языке Lua. И игры запускаются почти на всех платформах, в отличии от Solar2D, даже на Nintendo Switch.
Я знаком с одним из разработчиков этого движка, но у меня как-то не сложилось попробовать разработку на Defold. Я установил, посмотрел, и на следующий день устроился на работу, что всё желание пропало дальше вникать.
У Defold развитое сообщество. Ограниченные возможности работы с 3D.
Ren’Py это бесплатный движок с открытым кодом для создания визуальных новелл.
В Ren’Py можно делать мини игры, но это может быть не так удобно и гибко.
Если вы хотите создавать визуальные новеллы с выбором ответов и разветлвения, то двжиок вам отлично подойдет. Язык программирования Python для доп фичей.
Это кроссплатформенный игровой 3D-движок, основанный AWS на базе Lumberyard Game Engine, который сам в своё время был основан на базе Cry Engine 3. Этот движок подходит для разработки AAA игр под современные платформы.
У него открытый исходный код.
Каждый из интегрированных компонентов O3DE (называемых "Gems") может быть адаптирован отдельно, что дает вам доступ к определенным функциям, необходимым для вашей игры.
Языки программирования Lua, ядро и модули на C++.
Cocos2d - это кросплатформенный движок для создания 2D игр. Это как раз один из движков, среди которых я выбирал на чем начать разрабатывать мобильные игры. Но мой выбор пал на Solar2D. Но движок хороший и стоит к нему присмотреться. Он поддерживает Python, C++, Lua и JavaScript.
Cocos2d имеет активное сообщество разработчиков, которое готово поделиться своим опытом, решить проблемы и предоставить полезные ресурсы. Там можно найти документацию, туториалы и примеры кода, чтобы быстро освоить этот движок и начать создание своей игры.
Мой любимый Flash, с него всё у меня начиналось. Много игр на нем разработал и даже что-то заработал.
У него есть пакет Adobe AIR SDK, который позволяет создавать мобильные и ПК игры в 2D.
Можно создавать анимацию внутри самого движка. Я думаю за счет этого и был в свое время очень популярен флеш и его мощно преимущество в то время.
Язык программирования ActionScript, который очень похож на JavaScript.
Лично я не рискнул выпускать игры на мобилках после флеша на Adobe. Но мой знакомый до сих пор разрабатывает игры на нем и вышло сделать популярную RTS похожую на RedAlert для мобильных устройств, а также менее популярную, похожую на Dune)
Construct 3 это движок для разработки 2D игр. Да, он также начал поддерживать 3D, но если посмотреть на выпущенные проекты, то все они в основном 2D инди игры. Преимущество этого движка в том, что на нем очень быстро можно создавать игры. Я бы его рассматривал для создания прототипов, чтобы проверить гипотезу, получиться быстро фидбек от игроков, чтобы оценить потенциальность разработки полноценной игры.
Поддерживается язык программирования JavaScript.
RPG Maker – отличный вариант для создания двумерных РПГ, если нет желания программировать, но очень хочется создать свою jrpg.
В нем встроена система диалогов и событий. Но какие-то сложные фичи реализовать будет трудно, в этом вам движок будет ограничивать.
Stencyl еще один движок для создания 2D игр без кода.
Визуальная система программирования создает логику и поведение игровых объектов с помощью блоков и пазлов, что делает процесс разработки доступным для новичков. Это позволяет сосредоточиться на дизайне уровней, графике и игровом процессе, минимизируя необходимость писать код с нуля.
Это кроссплатформенный движок, т.е. можно создать игры для веба, мобилок и ПК.
Когда я сам программировал игры, то я очень активно работал на движках/фреймворках Flash, Solar2D и PixiJS, на котором основан Phaser. Т.к. последние 5 лет я руководитель проектов, то предпочитаю чтобы разработка шла на Unity. Хотя, когда я работаю в сторонних компаниях, также используются и собственные движки.
В комментариях напишите, какие вы используете движки, чему отдаете предпочтение. В телеграм канале рассказываю о своих текущих проектах. Например, как разработал игру за 1 неделю.
Присоединяйтесь к обсуждению самых разных тем: как выбрать комплектующие для ПК, куда съездить на майские праздники, можно ли решить юридический вопрос и вернуть деньги, как спасти лимонное дерево или какой велосипед купить на весну–лето.
Intersect предоставляет полный набор средств разработки игр для создания 2D-MMORPG без опыта программирования! Если кому интересно тип лицензии GPL. Ссылка на движок Intersect Engine
Описание движка
Intersect — это набор инструментов для создания онлайн-ролевых игр на C#. Этот движок сочетает в себе любимые аспекты онлайн-ролевых игр классических 2D-движков orpg на основе плиток с современной кодовой базой, удобным для пользователя пакетом разработки и совершенно новыми функциями. Карты бесшовны, и их создавать проще, чем когда-либо. У нас отличная система освещения, мероприятия и многое-многое другое! Наш клиент имеет отдельную лицензию MIT, поэтому вы можете легально распространять свои творения с целью получения прибыли, не раскрывая исходных изменений.
Есть следующие раздачи:
Дополнительная информация про Unity - https://www.rbc.ru/life/news/6501a0b19a794746a198ff93
Уже неделю моя гоблинская тушка не подавала признаков жизни на Пикабу. Все кто думали что я сдох - не дождетесь, я мудитировал и искал знания в молитвах Горку и Морку. В переводе на человеческий - смотрел и читал обучающие материалы по Godot.
Проблема состоит в том, что проще выдать замуж троллиху, чем найти годный и главное понятный материал по данному движку на русском языке. Конечно, есть какие то азы, но дальше чем кривое управление платформера они не уходят, либо уже мне как новичку становится непонятно.
На помощь приходит всеми любимый зарубежный Ютуб и переводчик видео от Яндекса, наткнулся на пару каналов где информацию доносят более-менее доходчиво. И так, чему же я научился за эту неделю?
Тут наша сцена и связанные с ней узлы...
Создаем карту
Пока что обучаюсь на примере платформера, а это значит нам нужно создать какое либо поле, где может бегать наш персонаж. На данный момент я изучил два способа, первый - TileMap про который лучше рассказать в отдельном посте, а вот второй более гоблинский.
Все мы иногда статичное тело...
Правой кнопкой мыши жмякаем на нашу 2D сцену "World" и выбираем "Добавить дочерний узел". В списке ищем "StaticBody2d" и теперь у нас есть база. Добавляем два дочерних узла уже в статичный объект - "Polygon2D" и "CollisionPolygon2D".
Для тех кто не понимает на басурманском - объясню, что есть что. Первый - это визуальная геометрическая фигура, а второй - область столкновения (collision - столкновение). Все это нужно для того, чтобы мы могли увидеть наш объект, а игрок не проваливался внутрь него при столкновении.
Рисуем будущую карту при помощи CollisionPolygon2D...
При помощи области столкновения мы наметим будущую карту. Для того чтобы ее было проще рисовать - сделаем привязку к сетке, а далее добавляем по клеткам метки. Должно получится нечто схожее со скриншотом выше.
Код приравнивающий форму фигуры к форме области столкновения...
Теперь нам нужно сделать так, чтобы визуальная фигура повторяла форму области столкновения. Нажимаем на нашу сцену и добавляем к ней скрипт. GD-script во многом схож с языком Python и более-менее прост в понимании. Сначала добавим наши узлы в виде переменных, для этого зажимаем "ctrl" и перетаскиваем в код после блока extends.
Прописываем функцию ready, она будет воспроизводится сразу во время запуска сцены. А дальше просто приравниваем форму фигуры к форме области столкновения (polygon_2d.polygon = collision_polygon_2d.polygon).
Получаем дешевую и сердитую карту - все в гоблинском стиле!
Карта готова, но что делать теперь? Пора добавить нашего персонажа-марионетку.
Создаем новую сцену и для ее основы берем узел CharacterBody2D. Для будущей простоты восприятия я переименовал его в Player. Чтобы увидеть нашу тушку - добавим к ней дочерний узел "Sprite2D", а чтобы можно было еще и потрогать "CollisionShape2D".
Добавляем иконку
Выделяем область столкновения...
Тыкаем спрайт, выбираем текстуру и из быстрой загрузки возьмем иконку Godot. Пока что этого хватит, ведь в этом посте мы не будем затрагивать тему анимации. Далее выделяем область столкновения и сцепляем все это в одну группу кнопкой вверху панели.
Тело готово, пора научить его шевелиться и реагировать на физику. Для этого мы создаем для нашего Player свой скрипт.
Наши переменные...
Задаем переменные через const (constants - постоянное значение). Значения констант не могут быть изменены в ходе самой программы, на то они и постоянные. Для чего нужны эти значения расскажу ниже.
const SPEED = 150.0
const JUMP_VELOCITY = -300.0
const FRICTION = 1000.0
const ACCELERATION = 600.0
На этот раз мы берем не функцию ready, а другую - physics_process. В отличии от простого process, здесь время между выполнением функции будет одинаковым. Это обеспечит нам стабильность при передвижении объектов.
Начнем с настройки гравитации!
Дело в том, что система координат X-Y в Godot имеет свои приколы. Ось X идет от отрицательной к положительной слева направо, однако ось Y идет от отрицательной к положительной сверху вниз. То есть ось Y буквально перевернута с ног на голову. Если непонятно - объясню проще:
Хотим передвинуть вправо - прибавляем к оси X;
Хотим передвинуть влево - вычитаем из оси X;
Хотим передвинуть вниз - прибавляем к оси Y;
Хотим передвинуть вверх - вычитаем из оси Y;
Гравитация... беспощадная ты с*ка!
Как же нам заставить персонажа падать под давлением гравитации? Для начала добавим переменную GRAVITY равную 1000. Затем создаем свою пользовательскую функцию и называем ее aplay_gravity.
Мы должны падать когда находимся в воздухе, то есть не на полу. Буквально говорим программе "Если объект не на полу сделай следующее: измени положение по оси Y в положительную сторону на заданное нами расстояние".
if not is_on_floor():
velocity.y += GRAVITY * delta
Что такое delta? Это время между кадрами, благодаря чему перемещение будет стабильным вне зависимости от FPS.
velocity - это параметр скорости изначально зашитый в наш объект. По этой причине его так же не требуется объявлять как переменную. Грубо говоря сюда мы задаем то расстояние, на которое должен переместиться объект по осям X и Y.
Так как мы каждый раз увеличиваем прошлое значение velocity.y, гравитация будет усиливаться с каждой секундой в воздухе. Благодаря этому у нас не получится прыгать бесконечно вверх и нас прижмет к полу.
Отлично, нас прижало как после "Балтики 9"!
Теперь настраиваем прыжки!
Для этого создаем еще одну пользовательскую функцию handle_jump. Мы говорим ей: "Если мы нажимаем кнопку прыжка и находимся на полу - измени положение по оси Y в отрицательную сторону". Напомню, что константа прыжка имеет отрицательное значение.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y += JUMP_VELOCITY
К гравитации добавляются прыжки...
Прыжок веры...
С прыжками и гравитацией мы освоились, теперь научимся ходить-бродить!
Надеюсь вы еще не забыли, что направление у нас зависит от отрицательного или положительного значения? Есть такая штука в Input как get_axis, где мы задаем две клавиши. Нажатие первой клавиши прировняет переменную к значению -1, нажатие второй клавиши наоборот к 1. Если ни одна из клавиш не нажата, переменная принимает значение 0.
Создаем переменную input_axis внутри physics_process, на этот раз через var, ведь она будет менять свои значения в процессе. А далее задаем машине установку "Если нажата одна из двух клавиш, то мы меняем значение по оси X в зависимости от выбранного направления".
Для этого используем move_toward, где первое значение - наша начальная точка, второе - конечная точка, а третье - промежутки которые будут проходится для их достижения.
Начальная точка - velocity.x
Конечная точка - наша скорость SPEED помноженная на направление (-1 или 1)
Промежутки - наше ускорение ACCELERATION помноженное на время между кадрами delta
if input_axis !=0 :
velocity.x = move_toward(velocity.x, SPEED * input_axis, ACCELERATION * delta)
Вот наш код...
А вот признаки жизни... беги Форест - БЕГИ!
Двигаться мы можем, а вот с остановкой проблема. Что не дает нам вечно кататься по земле? СИЛА ТРЕНИЯ!
Для того чтобы создать силу трения мы делаем похожую функцию. Только теперь конечной точкой у нас выступает 0, а вместо ACCELERATION берем параметр FRICTION. Включается все когда мы не нажимаем кнопки движения, то есть input_axis равен нулю.
if input_axis == 0 :
velocity.x = move_toward(velocity.x, 0, FRICTION * delta)
Бегаю, никого не трогаю... к земле притягиваюсь во время прыжка...
Вишенкой на торте внутри физической функции является move_and_slide которая и отвечает за все эти процессы. Без нее указанные выше шаманские обряды просто не запустятся.
Получился максимально простой гоблинский платформер. Конечно, это пока сложно назвать игрой... но оно работает во славу Горка и Морка! В данном посте я рассказал лишь основы изученного, благо материал заготовлен почти на месяц вперед.
Надеюсь для тех кто в первый раз сталкивается с Godot данный пост будет хоть немного полезен, а более опытные орки и гоблины знатно посмеются с попыток новичка вкатиться в разработку игр.
Если вам интересно и дальше смотреть на то как я собираю лбом грабли, а может и самим чему-то научиться вместе со мной - подписывайтесь на данный блог!
P.S.
Вот так полностью выглядит код управления персонажем, если кому то нужно для ознакомления.
Традиционный тематический гоблин в конце!
Здравствуйте, друзья!
Как и многие среди вас, являюсь неизлечимым геймером.
В последнее время обнаружил, что ААА-игры приносят всё меньше и меньше удовольствия, а чаще, так и вообще не приносят оного.
Так я погрузился в тему эмуляторов ретро консолей. 40+ часов в восьмибитного Darkwin Duck? - Не вопрос! Столько же в каждую часть Червяка Джима с шедевральной Mega Drive? - Изи! Теперь вот ещё и Flashback...
Давно мечтал сделать что-то своё, но тогда я сильно был погружён в дарксоулсы, и понимал что вдохновляясь этим, сделать что нибудь подобное нереально.
Теперь же увидев насколько могли ребята из 90-ых, вера в свои возможности немного вернулась.
Хотелось бы попробовать сделать геймплейно просто 2D платформер, аля Червяк Джим, визуально выполненное в технике ротоскопии как Mortal Kombat/Flashback и иже с ними.
Только представьте, насколько можно всё сделать плавно и красиво с нынешними технологиями.
Реально я силён по части звукового оформления. У меня есть студия звукозаписи и сделать красивую оригинальную/авторскую озвучку я смогу точно: и музыку и FX-ы.
Наверняка, что-то сумею освоить в процессе.
Может кто-то захочет принять участие.
Может присоветуете движок и мануалы.
Буду признателен за любой отклик!
Всем благ и улыбок!)