Инди Anton Nadtoka
1 168

Разработка игрового движка

Чем лучше готовый движок

В закладки
В данный момент существует множество игровых движков под разные типы игр. Можно взять любой и при наличии опыта программирования или огромного желания, начинать реализовывать проект своей мечты. Разные движки требуют различного уровня знаний и опыта. Если ориентироваться на платформу iOS можно выбрать SpriteKit или Cocos2D, если выбрать Android - выбор будет LibGDX или AndEngine. Но часто берут кроссплатформенные движки - код пишется один раз и с небольшими доработками или без них компилируется под разные платформы.

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

Выбор движка по бэкграунду знаний:

  • Cocos2Dx, Unreal Engine - C++
  • LOVE, Corona SDK, Defold - Lua
  • Unity3D - C#
  • SpriteKit - Swift \ ObjectiveC
  • AndEngine, LibGDX - Java

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

А не написать ли мне свой движок?

Вводная часть закончена, теперь можно и представиться. Меня зовут Надтока Антон, я мобильный разработчик для iOS и Android. В свободное от работы время я пишу мобильный движок для игр. Будучи студентом как и многие другие (думаю были и такие) хотел создать свой Counter Strike. Еще был OpenGL 1.1 и в то время я реализовывал небольшой движок для Windows, который позволял отображать SkyBox, оружие, уровень и эффект стрельбы. Чтобы скрыть недостатки графики использовался туман. Позже работая по разным направлениям сконцентрировался на мобильной разработке в начале 2012. Удалось пощупать и поработать с AndEngine, Cocos2Dx и Unity.

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

Причины написать сейчас свой движок:

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

Посколько я начал работать с С++ с 2005 года выбор языка отпал сам собой. За основу был взят стандарт C++11.

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

Спасибо за внимание.

{ "author_name": "Anton Nadtoka", "author_type": "self", "tags": [], "comments": 34, "likes": 23, "favorites": 15, "is_advertisement": false, "subsite_label": "indie", "id": 20712, "is_wide": false }
{ "id": 20712, "author_id": 52349, "diff_limit": 1000, "urls": {"diff":"\/comments\/20712\/get","add":"\/comments\/20712\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/20712"}, "attach_limit": 2, "max_comment_text_length": 5000 }

34 комментария 34 комм.

Популярные

По порядку

Написать комментарий...

Donovan

15

Мои любимые статьи про то как начну что-то делать ;) можно открывать тотализатор, на сколько статей без воды хватит автора ;)

Ответить

Andrey Apanasik

Donovan
1

Обычно, не более 3-х.

Ответить

Donovan

Andrey
1

Ставка принята, я пожалуй поставлю на то, что эта статья будет последняя :D

Donovan - 1 статья
Andrey Apanasik - 3 статьи

Ответить

Dmitry Namynnuz

8

Разработка игрового движка

Не нужна.

Ответить

Dmitry Namynnuz

Dmitry
8

Поясню.
Узнать как все работает под капотом

Это не написание движка. Это написание PoC или ещё какого тестового решения. Написание велосипедов — это всегда приветствуется. Для того, чтобы понять, как устроены чужие и какой из них тебе следует брать, а так же оптимальнее с ним работать. Но и только. Тем более когда дело касается собственного движка.
Полный контроль над кодом и поведением движка

Ну, оное так для многих решений. Особенно если они опенсорсные. А дальше всё упирается в архитектуру. Как ты собрался это обходить?
Компактный размер финального результата

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

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

Ну, это замечательно, конечно. То есть решение ради процесса, а не самого решения. Собственно, о чём и я.

Ответить

Anton Nadtoka

Dmitry
0

Движок не open source. Каждая архитектура - своя среда. Сейчас я запускаю на iOS, Android и Windows, Linux, Mac. Кроме ресурсов игры еще есть разные библиотеки, которые
используются другими движками. Тот же Mono .NET. Идеи на движок не только в игровом плане, но и в обучающем. Работа со звуком, видео.
Тесты будут в планах. В качестве сборщика CMake, там же будут тесты - когда поделю на модули.

Ответить

Александр Ko

Anton
0

Не опен сорс? А нафига тогда ты о нём пишешь? Кому он нужен такой?

Ответить

Anton Nadtoka

Александр
1

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

Ответить

Donovan

Anton
0

Почему бы не перекопать исходники условного Godot или UE, или чего попроще типа Love, если чуть пониже уровнем то условный SDL, при этом реализуя какие-то фишечки рендеринга/оптимизации/работы с медиа/физики/контроллеров/чегоугодно в качестве отдельных либ/кусков кода/примеров, чтобы не терять время? Человек сверху хорошо написал про пруф оф концепты.

Ну т.е. не похоже что у тебя есть хоть какой-то план. Какая-то минимальная спека хотя бы в голове, видение MVP движка, кроме как хочу на C++ 11, чтобы было кроссплатформенно, а еще потом будут тесты, а вообще, чтобы сделать игру где можно грабить корованы.

Т.е. вот это

Узнать как все работает под капотом

Как работает под капотом что? С какого момента хочется лезть под капот? Начнешь писать свой OpenGL или нет? Ну чтобы уже на 100% быть уверенным, что все контролируешь и понимаешь.
Полный контроль над кодом и поведением движка

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

Компактный размер игры? В мире где ресурсы игры сожрут сотни мегабайт (и до бесконечности)?
Добавление новых функций в конкретные сроки

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

Это дело хорошее...

Ответить

Anton Nadtoka

Donovan
0

OpenGL нижний порог. MVP есть и работает - тесты и рефактор будет когда появится на это время. Вопрос не лучше сделать, а проще. Уже достаточно потрачено времени и сил, чтобы свернуться.

Ответить

Patrick

Dmitry
0

Unreal, Unity, CryEngine, Defold, Cocos, GM - сотни их для разных целей.

Ответить

DofElite

Dmitry
0

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

Ответить

Dmitry Namynnuz

DofElite
0

Имеет, когда ты этот смысл озвучил. А не просто так.

Ответить

Andrey Apanasik

DofElite
0

LibGDX. Моя первая игра на нём умещалась в 2мб ^_^

Ответить

Blind Metaphor

DofElite
0

GameMaker: Studio ещё есть для 2D.

Ответить

Threei

3

Получить кайф от разработки

сомнительная но единственная причина.

Ответить

Alex

2

Если цель сделать игру на своём движке. То это очень долгий процесс.
Проще взять готовый движок и делать уже саму игру, чем долбится в неизвестность. :)

Ответить

Кубера Локапал

0

Что это делает в Инди?

Ответить

Владислав Спивак

Кубера
7

Возможно, потому что "инди" - это не только майнкрафт или imagine dragons.

Ответить

Andrey Apanasik

0

Лучше статьи о кишках готовых популярных движков пишите)

Ответить

Medovyj kot

0

Промахнулся.

Ответить

Medovyj kot

Medovyj
0

Промахнулся.

Ответить

Александр Ko

Medovyj
0

Фигасе, а что можно свои комментарии править? Как?
Вроде раньше нельзя было.
После правки коммент не появляется заново в "Прямом эфире", и то ладно.
Хотя наредактировать можно немало.

Ответить

Иван Мелтдаун

Александр
0

15 минут есть, кажется. Три точки под комментом, справа — «Редактировать»

Ответить

Jess the Jog

0

тока в след раз пиши сразу статью побольше, а тут одно введение.

Ответить

Александр Ko

0

С++11 уже как бы больше 7 лет. Можно было бы и посвежее версию взять. В 17 есть вкусные вещи, ради которых можно и обновить тулчейн.

Ответить

Anton Nadtoka

Александр
0

После рефакторина перейду на С++17

Ответить

Ярослав Ходарев

0

Чисто ради интереса, на чем X-Ray написан?

P.s. В Гугле забанен

Ответить

Michael Menshenin

0

Если позволите, пара цитат откуда-то из интернета:

"Программы нужно писать, чтобы их читали программисты"

"Чукча не читатель, чукча писатель"

Ответить

Forest Swamp

0

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

Ответить

Anton Nadtoka

Forest
0

На счет времени согласен, отнимает много времени и сил.

Ответить

Forest Swamp

Anton
0

Если цель - узнать как устроены игровые движки, то я бы в первую очередь почитал книгу "Game Engine Architecture". Возможно так будет лучше в плане управления свободным временем и общего понимания работы движков. Если глубоко ударяться в разработку движка, то можно совсем уйти от разработки непосредственно игр, так как есть риск надолго залипнуть за оптимизацией и реализацией всяких интересных штук под разные жанры игр.

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]