Инди Anton Nadtoka
1 424

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

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

В закладки
В данный момент существует множество игровых движков под разные типы игр. Можно взять любой и при наличии опыта программирования или огромного желания, начинать реализовывать проект своей мечты. Разные движки требуют различного уровня знаний и опыта. Если ориентироваться на платформу 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": 35, "likes": 23, "favorites": 17, "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, "subsite_id": 64960 }

35 комментариев 35 комм.

Популярные

По порядку

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

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

Ответить
1

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

Ответить
1

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

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

Ответить
0

Ставка не сыграла

Ответить
8

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

Не нужна.

Ответить
8

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

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

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

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

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

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

Ответить
0

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

Ответить
0

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

Ответить
1

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

Ответить
0

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

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

Т.е. вот это

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

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

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

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

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
3

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

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

Ответить
2

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

Ответить
0

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

Ответить
7

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

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

Ответить
0

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

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

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

Ответить
0

Прямой эфир

[ { "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" } } } ]
10 самых лучших блюд
(согласно инстаграму Хидео Кодзимы)
Подписаться на push-уведомления