Всем привет!
Я решил вести блог о разработке игр на своем личном опыте. Я пересилил себя и не стал писать "дневник" разработчика, потому что это слишком субъективно, все же интереснее писать о каких-то типичных проблемах и ошибках уже имея определенный опыт. Просто потому, что есть явные косяки, которые можно сразу подсветить начинающим, так сказать.
Это моя первая статья, в которой я, быть может немного сумбурно, с иронией и сарказмом, расскажу о:
Мотивации - зачем я вообще влез в геймдев, имея почти 10-летний опыт в бизнес-анализе, но не умея рисовать и программировать - казалось бы, основные навыки отсутствуют
Концепт продукта в самых общих чертах
Про то, какие сделать подготовительные шаги перед разработкой
Вводные на момент начала работ
Примерный набросок тем, которые я планирую освещать в цикле статей
Суть статьи в одно предложение:
Очередной представитель офисного планктона с завышенным ЧСВ решил, что он самый умный и что кому‑то будет интересно читать про то, как он создал себе проблемы и сам же «героически» их преодолевает
А теперь чуть подробнее...
И да, я знаю, что вы все любите картинки, но ниже будет just plane text.
1. Немного про мотивацию
Почти на каждом месте работы я вначале увлекаюсь идеей и продуктами, а потом понимаю, насколько кривые и косые везде процессы. Где-то процессы стараются выстроить, но, например, квалификация разработчиков, мягко говоря, вызывает вопросы. И я всегда скатываюсь в то, что начинаю крыть х@**и всех вокруг - разработчиков за то, что делают костыли, тестировщиков за то, что пропускают очевидные баги, в которые я попадаю чуть ли не с первой минуты проверки фичи, кривые процессы, при которых приоритетные фичи задвигаются назад и так далее. И в какой-то момент я вспомнил Довлатова
А надо бы всё время себя спрашивать: не г@#*о ли я?
Почему именно геймдев? А не аналитика/фриланс или просто какой-то простой проект/приложение?
Аналитика и прочее - для меня это что-то в отрыве от цельного продукта, просто часть работ, которую надо делать в процессе создания цельного продукта. А мне хочется сделать как раз это самое цельное решение от и до. В этом случае без разработки никуда.
Несмотря на кажущуюся простоту входа, геймдев, по-моему, сугубо личному ощущению, несколько сложнее web-приложений - конечно, я не сравниваю тетрис и какую-нибудь банковскую платформу - из-за требований к чисто субъективному интересу процесса использования продукта. Это, с одной стороны, как плюс, так и минус. В любом случае я выбрал это направление потому, что у меня есть интерес к играм, вот и всё и, если тут что-то получится, то это будет более значимый успех, чем в знакомой мне сфере web-разработки.
Еще один пункт - мне хочется освоить новую специализацию - разработку, и делать это я хочу не на каких-то синтетических задачах, а на вполне конкретных, которые мне интересны
Краткая историческая справка
Мне нравятся хорошие игры. Я помню, как в далеком 2002 мой лучший друг подарил мне одну из самых невероятных игр, в которые я когда-либо играл. В эпоху стратегий и по-своему красивых, но все же линейных шутеров я увидел тактический симулятор от первого лица с открытым миром и супер-реалистичными механиками:
В тебя попали - ты труп. Ранение в ноги - не можешь ходить, а если попали в руки - прицел сбивается.
Сохранение одно на миссию
Враг может тебя и не видеть, но кинуть гранату на звук выстрела
Обнаружил себя - противник ложится на землю и начинает тебя обстреливать
И плюс к этому бронетехника и авиация, минометы, огромная вариативность прохождения
В общем, на тот момент, играя в эту игру, и пытаясь выжить, проходя через лес, кишащий партизанами, с вражеским БМП на хвосте, которая высаживала десант в ста метрах от меня, я чувствовал, как мое очко втягивает обивку кресла (или то был просто деревянный стул, я уже не помню). И в этой игре был редактор миссий, в который я в конце концов залип, делая какие-то свои сценарии и пытаясь даже сконфигурировать поведение бойцов и их характеристики в xml, а затем выкладывал получившиеся миссии на форум. Это, наверно, и была первая точка, где я понял, что мне интересно что-то делать для других.
Теперь про выбор жанра
Очевидно, что сделать тактический симулятор в качестве первой игры, да ещё в одиночку и без опыта совсем нереально - я трезво оцениваю свои возможности. Аркады/мобилки мне не интересны. Поэтому я выбрал для первого продукта 2.5D экономический симулятор на Unity (типичный лайтовый проект, не так ли?). Почему? - потому что его можно докручивать модами и дополнениями, и даже новыми механиками после основного релиза. Плюс, не нужен серьезный дизайн, а с арт-дизайном у меня никогда не было хорошо. На тот момент, мне казалось, что это не должно быть ТАК сложно. Это был фундаментальный просчёт.
А Unity - потому что считается, что это самый простой движок для новичков. Спустя полтора года плевался я от него знатно в некоторые моменты.
2. Концепт продукта
Мне хотелось совместить жанр экономического симулятора с какой-то социальной тематикой - и я выбрал для себя идею симулятора школы. То, что я до этого видел на рынке (не могу сказать, что я просмотрел все игры - мне лень на это тратить время) сводилось к эффективному тайм-менеджменту. По сути, это конвейер, фабрика если хотите, в которой надо наиболее эффективно обработать "детали". Школа в этом случае не более чем фон или какая-то обёртка. Мне не нравится такой концепт по духу, это не то, чем на самом деле является школа.
В своём продукте я делаю упор на социальное взаимодействие: есть ученики более способные, менее способные. Есть более общительные или менее общительные, задиры, "ботаны" и так далее.
У школы есть функционал расчета основных показателей, для простоты можно назвать один - пусть это будет обобщенная популярность. Популярность учитывает и средний уровень подготовки учеников и общий эмоциональный фон, количество драк, грязь, кол-во разных специализированных классов и доступных предметов, и так далее.
Чем она выше - тем выше и спрос на образовательные услуги, и вы, как менеджер школы, можете позволить принять более звёздных учеников, которые еще выше поднимут уровень.
И тут надо балансировать - вы можете принять "бандита" за высокую стоимость контракта, но он будет шпынять умных учеников, которые могут расторгнуть контракт - и в долгосрочной перспективе вам это принесет скорее убыток, с другой стороны на начальном этапе о вас никто не знает - и у вас нет особого выбора.
Следующий фрагмент я хотел выделить в отдельную статью, но вынужден объединить со вступлением, чтобы пройти модерацию. Говорят, что вы любите длинные статьи и жадны до технических подробностей. Смею вас огорчить, код выкладывать я, увы, не буду. (клик - закрывает статью).
3. Подготовительные шаги
Здесь я расскажу с позиции человека, который хочет сделать достаточно серьезный игровой продукт без опыта разработки, каким видится начальный объем работ. Еще раз уточню, что у меня прикладной опыт в аналитике, т.е. я по идее понимаю масштаб и трудоемкость задач.
Я специально сохранял бэкапы и свои наработки с самого начала проекта, чтобы затем можно было бы запустить редактор, полазать в коде и вспомнить, как я тогда представлял себе задачу и конечный результат. Скажу сразу, дорогие друзья, ничего я тогда себе не представлял. То есть, я верно оценил глобальный срок в два года на формирование самого примитивного прототипа, но я даже помыслить себе не мог, что конкретно придется делать и сколько ресурсов это потребует.
Итак, давайте начнем конкретно по шагам.
Шаг 1. Концепция
Самый первый шаг, который вы должны сделать - это написать концепт (и это касается не только игры, а в целом любого продукта). Неважно, какие отговорки вы для себя придумаете: "Да у меня все в голове, память отличная", "Да какой тут концепт, это и так все понятно", "Слушай, игра для мобилки, ну просто развлечься" - неважно, вы должны сесть и написать документ, в котором обозначите:
Что вы хотите сделать
Как увлекать игрока. Тут зависит от жанра. Для гонок это могут быть какие-то интересные трассы, для квестов - разного рода головоломки, для конвейеров/фабрик - механики развития или технологии и так далее
-
Как выглядит основная игровая петля. Расскажу на примере гонок:
Вы начинаете с примитивной тачки, выбираете одну из немногих доступных себе трасс, далее стараетесь выиграть гонку, получаете приз и плюс к "уровню", за деньги прокачиваете тачку, а новый уровень открывает вам новые более сложные трассы с более сложными противниками. И так далее.
Т.е. Трасса -> Деньги -> Прокачка -> Трасса...
В различного рода симуляторах-менеджерах примерно так же по сути. Есть объект, которым ты как "менеджер" управляешь. Этот объект выполняет какие-то функции:Больница - лечит пациентов. За деньги, естественно. На стартовый капитал вы открываете кабинеты -> получаете деньги с пациентов -> достраиваетесь -> цикл
Школа - обучает. На стартовый капитал строите классы -> привлекаете школьников, они платят вам деньги -> достраиваете новые классы -> цикл.
-
Магазин - обслуживает покупателей. Тут аналогия такая же.
Старайтесь здесь написать самое основное, не углубляйтесь в детали - оставьте их для следующего шага. Я не могу вам указывать на правильный путь, но могу лишь порекомендовать не читать литературу по геймдеву, всякие умные книжки, статьи и прочее. На этом этапе это совершенно бесполезно.
Затем, делайте подходы к детализации, расписывайте разные типы юнитов, какие механики планируете сделать, как NPC между собой взаимодействуют. Все, что придёт в голову. Повторяйте этот шаг по нескольку раз углубляясь в детали, пока не получится документ, в котором написан довольно подробный концепт без детализации конкретных функциональных требований, но с фичами вашего продукта. Здесь вы увидите объем, но, вероятно, не поймёте, насколько он огромный, если, также как и я, начинаете с нуля.
Цель шага 1 - сформировать у вас понимание того, что вы хотите получить. Поверьте, даже если вы считаете, что оно у вас кристально ясное - скорее всего, это далеко не так.
Примерный критерий успешности шага 1 - это если вы собрали друзей, выложили им идею своего решения и смогли ответить на все их вопросы - зачем в это играть, почему это интересно, а что будет если .... Если же на какой-либо вопрос вы сходу ответить не можете (очень важно отделить быстрый ответ, который вам сиюминутно пришел на ум от того, который фактически записан в концепции - если вы быстро соображаете, это еще не повод не фиксировать идеи на бумаге), то это значит, что вам необходимо еще проработать эту тему и подумать над идеей. Например, в своем симуляторе для меня некоторое время была неочевидна механика поступления денег для развития школы.
Понятное дело, что ученики приносят деньги за контракт, вопрос в периодичности. Каждый день - это странно. Каждый год - очень редко, тогда цена ошибки колоссальная - если ты просчитался, то приходится переигрывать. Поэтому, я ввел периоды оплаты (типа 10 игровых дней), но это просто игровая условность - в игре вообще должно быть много условностей. Не старайтесь делать ее близкой к реальности и чрезмерно усложнять - ваша задача сделать что-то интересное, а не разработать симулятор для какого-то министерства.
Итак, предположим, что вы собрали документ с концепцией (для ориентира - мой составлял 12 листов в ворде 12 кеглем, без картинок, с описанием идеи, механик и т.д.). Время, которое я суммарно на нее потратил - около 2 недель. Понятное дело, что ты не сидишь 8 часов в день над концепцией, просто иногда возникает какая-то мысль, ты в голове пытаешься представить решение, что-то записал. Пытаешься еще мысленно развить идею - записал. Возник вопрос - записал. И так далее.
Картинка (да, я обещал just plane text, но передумал)

Шаг 2. Декомпозиция по модулям
Если вы качественно проработали концепцию, то декомпозиция на модули будет делаться просто как продолжение и еще более подробная детализация концепции.
-
Фича-модули:
Камера. Этот модуль отвечает за перемещение камеры по сцене, зуммирование и повороты.
Модуль грида. Этот модуль отвечает за хранение информации об объектах в ячейках (клеточках) и пересчет визуальных координат объектов при поворотах карты
Модуль строительства. Этот модуль отвечает за размещение объектов, повороты, pipeline строительства-сноса)
Модуль поиска пути. Тут все понятно - поиск оптимального пути между двумя заданными точками.
NPC-модуль. Этот модуль отвечает за спавн-деспавн, логику принятия решений, взаимодействия, статы, изменение характеристик, прокачка, взросление и т.д.
UI - выделил в отдельный модуль, тк для симуляторов ux очень важен и будет куча всяких формочек-окошек.
Модуль симуляции. Он отвечает за переключение режимов симуляции, строительства, паузу, скорость симуляции и т.д.
-
Инфраструктурные модули:
Игровое меню
Профиль + настройки (кастомизация клавиш)
Сохранение - загрузка
Модуль обработки команд пользовательского ввода
Шина событий

В описании к изображению я, конечно, немного иронично прошелся по детализации, но если честно, я понимал, что объем работ колоссальный. Просто мне трудно было оценить это в...годах?
Самое главное - даже не думайте лезть в модуль NPC раньше времени. Это самая сложная часть игры как идейно, архитектурно, так и алгоритмически. Это самый трудоёмкий кусок и, если вы начнете его пилить раньше времени (раньше, чем у вас появится понимание того, как должна быть выстроена архитектура и как решать типовые задачи), то это приведет к тому, что вы скатитесь в прокрастинацию, потому что масштаб и уровень задач там несопоставим с вашим уровнем и умением их решать. Это как в игре с персонажем начального уровня пойти на локацию с мобами уровня финала игры - вас просто вынесут с одного "тычка", а попытка прохождения "в лоб" будет весьма долгой и нудной.
Здесь я специально не раскрываю деталей этих сервисов - я планирую большую серию статей и опишу их чуть подробнее в последующих выпусках.
Как итог этого раздела, с учетом набитых шишек, я выделил бы следующее:
Симулятор/менеджмент - очень трудный жанр для человека без опыта разработки, тк именно тут и нужно кодить логику, очень много кода и очень сложная логика. Ладно бы еще только кодить - её вначале надо придумать. Сейчас я бы выбрал что-то типа платформера/бродилки где ты управляешь персонажем и проходишь линейные карты - за полтора года я бы уже запилил даже не прототип, а прям что-то ближе к альфа-релизу, но уже поздняк метаться.
С другой стороны - в симуляторах вы научитесь кодить и проектировать логику, и скорость роста навыков будет сильно выше, чем если бы вы устроились разработчиком в штат.Если у вас нет опыта, то цель первых 3-4 месяцев должна быть не запилить MVP какой-то игровой механики, а, простите, научиться хотя бы в базовое проектирование логики, понять синтаксис языка программирования и научиться самым первым шагам в модульности. Без этого вы далеко не уйдёте. Пока что нельзя скормить llm красивую идею и получить готовое работающее решение уровня известных симуляторов колоний.
Скажу по себе. Базовый грид я сделал после одного или двух месяцев работы и далее на протяжении года у меня визуально не менялось ни-че-го, хотя кодовая база была около 20к самописных строчек.Не читайте умных книжек. Я прочел паттерны проектирования Мартина Фаулера еще будучи системным аналитиком, но по-настоящему понимать их ты начинаешь только на практике. Книги - просто рассказ, красивый язык - все, что нужно для маркетинга и продаж, не более. Навыки вы получите только на практике и никак иначе.
Шаг 3. Выбор движка и визуала
Все, что я описал выше можно реализовать на любом из доступных движков, я опишу свои мысли по выбору движка (и признаюсь честно, я думаю, что выбрал бы Unity еще раз несмотря на все нюансы, которые иногда возникали). Плюсы, которые я тогда выделил для себя:
Огромное количество обучающих материалов (спустя полтора года скажу, что им грош цена, потому что не подходят для "продакшена" - простите, если кого-то задел, но я так считаю)
Куча платных и бесплатных наборов - мебель, тайлы, персонажи и так далее.
Бесплатный редактор
С# - мне хотелось научиться на нем писать код
Говорят, что Unity удобен для начинающих.
В общем, когда ты профан в игровых движках и вообще не умеешь писать код, то сделать осмысленный выбор в принципе невозможно. Спустя полтора года скажу, что нюансы важны для серьезных игровых проектов, а сделать пет-проект можно на чем угодно. Так что все равно, выбирайте любой движок.
А вот с визуалом интереснее. Тут есть принципиальная развилка:
-
2D
Пример 2D игры из открытых источников Плюсы:
- Простые визуалы - по сути обычные 2D картинки, которые можно легко сделать самому.
- Можно наклепать что-то самому
Минусы:
- Нет ощущения "глубины"
- Нельзя увидеть постройку со стороны. Представьте, что, например, The Sims был бы 2D - вроде построили дом, а стены увидеть нельзя. Ну такое. Такой визуал нельзя выбирать для игр, в которых механика строительства одна из основных.
- карта обычно не поворачивается. -
2.5D
Это по сути 2D, которая притворяется, что она 3D - я выбрал именно такой вариантПример из моей игры - 2.5D Плюсы:
- Тоже 2D картинка, не нужно делать 3D-модели
- Есть ощущение глубины, можно скрывать или показывать стены, можно увидеть всю постройку целиком
- В теории можно перейти на полноценное 3D менее болезненно, чем с обычного 2D
- Можно наклепать что-то самомуМинусы:
- Поворот сделать можно, но только на углы, кратные 90 и без анимаций - просто состояние карты чик - и в один кадр перерисовывается.
- Для каждого из поворотов надо делать свое изображение предметов/моделек
- Как и в обычном 2D предметы нельзя свободно "вращать" - для каждого угла должна быть своя 2D картинка
- Чуть сложнее работа с координатами - надо вникнуть в изометрическую проекцию и сделать преобразования координат.
- Нужно поизвращаться для работы со светом и тенью. Динамическое освещение (это когда, например, персонаж проходит под лампой и у него плавное меняется освещение разных частей тела в процессе движения) - вообще без шансов. -
3D
Пример 3D сцены из открытых источников Плюсы:
- Все модельки - полноценные 3D объекты, их можно разворачивать под любыми углами - безграничная вариативность построек и размещения предметов
- Проще сделать свет, тени. Можно сделать динамическое освещение разных частей тела
- Можно сделать плавные повороты, менять угол обзора камеры - в общем простор для фантазии.
Минусы:
- Сам уже сходу не сделаешь, надо тратить больше ресурсов и вникать в принципы построения 3D-моделей. Другими словами - нужен дизайнер (пока еще желательно человек).
- Более ресурсоемкие с точки зрения вычислительных мощностей
Для себя я выбрал вариант 2 - изометрические объекты, но с полноценными 3D персонажами (об этом расскажу значительно позже). 3D было очень заманчивым, но я прекрасно понимал, что я не потяну и разработку и дизайн в одного. А в будущем при желании можно перейти на 3D.
Подготовительные шаги заняли еще около 2х недель - я их закончил аккурат к новому году.
Я еще раз посмотрел на концепцию, на схему, на объем...для меня это было интересно, но есть нюанс - это вводные, с которыми я входил (конечно, на момент 2024го мне было все равно на эти вводные)
4. Итак, вводные такие
Проект стартанул в 2024 прямо в новогодние каникулы
На момент старта я написал 0 (ноль) осмысленных строчек кода в прошлом. Какая-то программка на 300 строчек на С++ в универе ради получения зачета не в счет, я уже все забыл
0 сделанных и законченных лично мною каких-либо проектов
8 лет опыта работы бизнес/системным аналитиком в разработке web-приложений - могу придумать концепцию продукта, выделить фичи, декомпозировать их на мелкие требования, оценить их с точки зрения сложности/пользы и т.д. Это, очевидно, плюс. Но это работа в команде над частью решения
Работаю 8 часов в день 5/2, время на проект - по вечерам и в выходные
Использую llm как ментора и код-ревьювера.
Я увлекающийся.
Не сказал бы, что это красивая картинка для входа в gamedev, в особенности пункты 2 и 3.
Но, как сказал один известный человек
У нас есть… что было. Сегодняшняя ситуация, которая есть. И нужно смотреть, какой мы можем…Что делать..
5. О чем буду писать
За чуть более, чем полтора года у меня накопилось некоторое количество собранных граблей, которыми я могу поделиться. Цикл статей будет интересен (ну, я на это надеюсь):
Тем, кто также, как и я, решил попробовать себя в геймдеве без особого опыта
Обычным геймдев разработчикам - в конце концов проблемы в индустрии довольно похожие, если мы говорим про базовые сервисы
Просто людям, которым интересно понаблюдать со стороны, как кто-то пытается что-то собрать из г@#на и палок.
Да мало ли кому ещё
Так вот, я постараюсь написать несколько статей на следующие темы:
Как я декомпозировал продукт на базовые сервисы и прикидывал, с какой стороны к этому приступить, осознавая весь масштаб и свою тотальную некомпетентность.
Почему в итоге я решил максимально изолировать игровую логику от типов данных конкретного движка
Как у меня появился, не побоюсь это так назвать, фреймворк поверх Unity с обобщенными механиками
Что может быть общего в покраске стен, перемещением персонажей по карте и взаимодействием NPC между собой
Как мне удалось перевести сервис поиска пути с одного из самых тяжелых игровых сервисов с ~ 300мс на один запрос с обработкой 10к нод в один из самых оптимизированных ~150мс на 1000 запросов.
Как я построил систему управления персонажами и отрефакторил архитектуру NPC-сервиса так, чтобы с 25 fps на 1000 активных анимированных агентов в кадре у меня стало 60fps на 10 000 (десять тысяч) активных анимированных агентов в кадре (это сильно больше НФТ по максимальному кол-ву активных агентов в кадре для игры, но все же).
Плюс, буду писать про конкретные фичи, что было сложного с той или иной механикой
Мой интерес в цикле этих статей - собрать какую-то аудиторию. Кто знает, может у меня получится довести продукт до конца, и вы сможете в него поиграть.
P.S. Я все еще считаю себя непрофильным разработчиком, поэтому, некоторые мои решения для вас могут показаться наивными, или даже в корне неверными - я просто делюсь своим опытом и не стремлюсь прогнуть чью бы то ни было точку зрения, доказав, что надо делать строго по-моему.
Это первая статья из цикла статей по геймдеву, спасибо, что дочитали её до конца. Если вам понравилось, и вы хотите быть в курсе новостей и обновлений - можете следить за выходом релизов в X или смотреть за выходом обновлений здесь. (на англ)
Да-да, у меня огромная аудитория.
