Баннер записи 'Как и обещал. Лооооооооооооооооооонгриииииииииииииииииииииииид.'

Как и обещал. Лооооооооооооооооооонгриииииииииииииииииииииииид.

Давайте знакомиться!

Всем привет, меня зовут Алексей и я разработчик.

Последние 2 года я работал в оутсорсинговой компании, но, как бы это абсурдно не звучало, я не особо разрабатывал игры. Я разрабатывал их куда больше в начале своей карьеры и когда только осваивал юнити. А когда я устроился профессионально я делал много разных вещей которые были как-то связаны с играми, но геймплей никогда. За 2 года! Ну, вы понимаете - кнопки крась/рекламу вставь/сдк обнови/билд залей/базовую архитектуру построй. Это тоже важная часть разработки, но когда вся твоя разработка состоит из такого рода задач, то ты скорее не разработчик игр, а просто программист.

Мой первый геймджем за 4 года.

Когда я только начал заниматься играми я конечно же пошел на курсы. И мой первый гейм джем разочаровал меня настолько, что я 4 года ни в чем не участвовал. Что бы вы понимали иронию текущей ситуации - я использовал минимум ассетов, в блендере кое как сделал модельки для игры, предложил оригинальную идею, а победила максимально отполированная продакшн реди игра ОБОЖЕ!! НА АССЕТАХ!!! и она была абсолютно обычная и отличалась от сторовских только сеттингом. Она была действительно хороша, но на тот момент я не понял что и почему. =)
Мне дали последнее призовое. Просто моя игра не заработала на телефонах жюри по причине того, что я не умел в оптимизацию от слова совсем и в неё не смогли поиграть... а билд на винде я собрать уже не смог... решил, что сам за себя и просить помощи ни у кого не стал, а зря! Я не хотел подобной ситуации и решил, что больше я участвовать не буду, но вот мы здесь.

Видео геймплея игры с первого геймджема. 

Почему я один.

До объявления темы я пошел к своим друзьям спрашивать "Ребята, я не хочу быть один в этот раз. Я хочу, чтобы мне кто-нибудь помог! Чтобы мы сделали что-то реально классное! Тем более, у нас есть неделя!" Но художница кранчила, геймдизайнер кранчила, а я безработный и я не кранчил. Я решил, что буду один в обнимку с нейросетями. "У нас было бесплатный chatGPT, подписка opencode Go, прошлый контент с подписки Suno и куча бесплатных токенов в день"...

Объявление темы и выбор того, что буду делать.

Учитывая мой бэкграунд, для меня принципиально, чтобы в игре был геймплей. Я решил закрыть гештальт за два года крудошлёпства.
Ох, коллеги, если вы это читаете - не обижайтесь. Было не только оно. Люблю вас! =)
Имхо - визуальная новелла - это не геймплей. А вот платформер… Нет! Нельзя делать платформер!

Я хотел, что бы "Враг - это ты!" была механикой. То есть игрок бы буквально показывал пальцем и говорил "враг - это ты" и что-то бы происходило. Первое, что приходит в голову это какой-нибудь клон Papers Please… или головоломка... или убить всех чужими руками... или Tower Defense. И вот от Tower Defense + устранение чужими руками - я начал развивать свою идею.

Вдохновение.

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

И вот это воображение + вдохновение задало очень высокую планку качества того, что я должен в итоге сделать на Game Jam за неделю. Я честно думал, что неделя - это очень много времени для такой игры и я справлюсь. У меня же есть бусты в виде нейронок! У меня есть ассеты (ОБОЖЕ!!)!
Но оказалось немножечко не так потому, что снова читаем выше - 2 года я геймплеем я не занимался и это наложило свои коррективы. Ведь я привык думать определенным образом, разрабатывать определённым образом, что все-таки я больше программист. А в инди главное быть разработчиком игр, а не программистом. Программисты знаете, это про архитектуру, там красивый код оптимизиации, рихтера почитай, мартина почитай и тд.

День 1. Первые тесты и физика

Первый день. Видео тут - https://youtu.be/JVpnBhHLbTs

Первые тесты мне понравились. Все было как я хотел. Враги весело разлетались в разные при толчках. Танцевали брейкденс. Делали всякие абсурдные веселые вещи. Но я прекрасно знал, что физика в Unity достаточно недетерминированна и точно будут проблемы. И они достаточно быстро начались. На видео по ссылке, вы увидите, что все начинает тормозить. Тормозить все начинает потому, что я неправильно настроил эти самые физические объекты, коллизии между ними и движок просто начинает захлебываться. Причем в профайлере он мне не показывал ничего такого. Он просто в какой то момент начинал тормозить. Но я не придал этому значение и продолжил двигаться в этом же направлении еще какое-то время. Потом я пришел к гибридному контроллеру персонажей, где есть и Character Controller, и есть Rigidbody, которое включается и выключается. Это тоже повлияло на то как всё выглядит и повлияло не в лучшую сторону.

День 2. Ловушки и Mixamo

Багуем, сегодня мы с тобой багуууем! - https://youtu.be/8UiYxSbiSRI

Совмещенные контроллеры + физические ловушки достаточно быстро ударили мне по рукам. Потому что, как видно, на видео платформа проходит сквозь капсулы врагов. И это потому что в какой-то момент, в не тот момент, работает CharacterController вместо Rigidbody. И нужно очень хитро отлавливать момент где твой контроллер становится физичным, а где он становится через CharacterController. И более того, нужно отлавливать это в момент приземления чтобы снова враг начал преследовать, атаковать и делать прочие вещи, которые велит его маленький мозг.
Это потребовало очень большое количество итерации. И важный момент момент, что когда они просто летят по физике - это иногда выглядит красиво, а иногда не очень. И ты никогда не знаешь, насколько это сломает себе персонажа в момент приземления. Поэтому, через какое-то время, мною было решено, что они будут разлетаться от центра платформы цветочком в некую точку между двух радиусов вокруг этой платформы. И это дало полностью оправляемое поведение - враги почти не сталкивались друг с другом и красиво разлетались. Но я открутил закручивание потому, что если они крутились, они потом странно себя вели. И в итоге я думал, что это будет выглядеть красивее, чем простая физика. Но вроде это не так. Напишите в комментарии, как по вашему это в итоге выглядит, и удалось ли вам вообще загнать этих маленьких блондинов на эти платформы и подкинуть. 

Что с лицом?!

А вы знали, что в Миксамо нужно заливать персонажа без скелета? А я не знал. И у меня был скелет со скелетом! Я долгое время бился, гуглил и не понимал что не так. Миксамо выдавало мне ошибку авторигинга. В итоге, я догуглился, достал блендер, убрал скелет, и залил модель в Миксамо. И вижу, что лицо у Лича сломано. Он двигает им неправильно независимо от того куда бы я не ставил шею. Я потратил на это наверное час или два. А потом вспомнил, что уменя топ даун игра и лица не видно. И не важно сломано ли у него лицо. Я правда хотел, чтобы в конце игры Лич танцевал смешной танец. И он был бы еще смешнее с этим сломанным лицом. Но я не успел его добавить, и, конечно, очень печально, что я много часов потратил на какую-то фигню.

День 3. Нужно больше коммитов!

ПЛОХОЙ КУБИК! Видео - https://youtu.be/4i1pCaTiXQE

И вот момент, когда мое воображение играет против меня. Потому, что в голове у себя я вижу AAA игру, в которой все вкусно и много контекстно зависимых анимаций. Но у меня всего неделя и это конец третьего дня, а у меня еще платформа странно подкидывает персонажей.
Изначально контроллер анимацией был в разы сложнее и я удалил половину всех состояний лишь бы просто собрать эту штуку. И честно говоря, я терпеть не могу настраивать аниматор. Гораздо удобнее это делать кодом. Кодом это выглядит проще. Проще дебажится, читается и проще выстроить граф нежели эти все - стрелочки, безумные сочетания условий, триггеры, булки!  И не всегда понятно что в итоге лучше! Все это надо сначала потестить и потом только ты поймешь. А если мы берем какие-то саб стейт машины и еще чего-то - просто ужас начинается. В общем иногда лучше сказать анимации - "играй". Знатно навоевавшись, я очнулся и решил, что буду делать проще - даже во вред моему ТРИПЛЭЙ виденью. Оно поплакало, но согласилось.

"Сложно!! Слишком сложно!!" (c) (для базового врага)

Забавно, что в тот день я отправил 12 коммитов, но я не могу показать вам функционала. Ближе к концу этого лонгрида будет понятно почему.

Когда я на джеме коммиты выглядят так

День 4. Пилы, дальники, шипы и еще больше коммитов.

Вырисовывается. Видео - https://youtu.be/IYDXa0HtnbE

В этот день я осознал проблему с движением персонажа, с тем, что все лагает, и что-то происходит, и я не совсем понимаю что. Вот она цена вайбкодинга. =) Благо, люди из сообщества мне подсказали, и под конец четвертого дня я уже имел готовый геймплей. У меня были все ловушки, которые сейчас в игре и достаточно понятное поведение при контакте с ними. Оставалось только собрать это в уровне, и протестировать все остальные системы, которых на тот момент уже накопилось воз и маленькая тележка!
Проблема с физикой была в том, что у почти у всех объектов была включена интерполяция. Я чесслово не знал, что она работает даже на Kinematic телах. Но опять же, профайлер мне ничего не показывал и я искал проблему в другом. Теперь то я знаю как надо...

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

Ловушек прибавилось, но они не делали ничего интересного - наносят урон и всё. Вот бы водомёт сделал! (потом сделаю)
Добавил абилку с посохом и она отлично работала до первых тестов на полном флоу! =)

Прототип уровня со спаун точками и направляющими для отрядов. Нужно больше гизмо!

День 5. Первые диалоги, Б.Р.УТ 16 коммитов

абыр, убырвалг

Первые диалоги - как много в них спешки! Тут я уже поплыл, но не понимаю куда.
Ассетом для диалогов я выбрал FeelSpeak. Я его выбрал не потому, что хорошо его знал, а потому, что в нём был UI, который был очень похож на то, что мне пришло в моём вдохновлённом видении. Так ассеты выбирать нельзя! =) Я не могу его посоветовать, но и не могу сказать, что он прям плохой. То, что мне пришлось лезть внутрь скорее плохо, чем хорошо. Плюс у него нагрузка в виде базы данных и очень странного решения для работы с персонажами. Внутри адская корутина, аллокации на каждый чих и FindObjectByType по любому поводу. Я бы переписал - это не продакшн реди решение. Я долго думал, что он просто сломан из за какой то несовместимости с моей версией юнити и откладывал разборки с ним почти до самого конца. Достаточно много времени ушло просто понять где он ломается, потом почему, а потом еще адаптировать его под себя. Да и работать с ним не очень удобно - он какой то вязкий и нет сортировки там где бы она пригодилась.

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

О да! В моей игре будет 3-х фазный босс! Наконец-то!
Вот тут я очень пожалел, что не разобрался с Unity Behaviour или каким то еще нодовым редактором поведения. Это бы очень сильно упростило мне сборку фаз, а нейросеть бы написала кастомные ноды для него. Но я не освоил - вайбкодим дальше.
В итоге, порядок был такой - я придумал, что босс будет 3х фазный, но не придумал, что он будет делать =)
По этому, я очень спешно собрал для него арену в отдельной сцене, накидал на него ловушек и стал лихорадочно думать. Написал фазы на листке бумаги, надиктовал всё в нейронку и стал тестировать, то что получается. Без остальных врагов, что бы серьёзной ошибкой ведь другие враги это ультимативное оружие против босса!
К 13 часам того же дня босс был готов! Он ходил, тряс камеру, прыгал и реально имел все 3 фазы!
А еще я понял, что последний день дальше и расслабился и это было очень зря - ведь я сидел уже на 2х бомбах, но еще не знал об этом!

Я уже собрал первый уровень и протестировал базовые механики! Был забавный баг когда враги выбегали на арену и убивались просто об пол. Я его поправил заложив бомбу отложенного действия!)
А еще я думаю, что завтра последний день и начинаю кранчить еще сильнее =) 

Был забавный момент при сборке сценария первого уровня - я забыл как системы должны были между собой взаимодействовать. Их было просто очень много и делались они очень быстро. Я буквально говорил - мне нужна такая система, а теперь такая и она так то работает с другой системой. Я всё это наговаривал в deepseek с первого дня и у меня была огромная пачка простых систем. В итоге, я попросил нейронку собрать мне резюме и написать везде комментариев к каждому классу и методу - что он делает и зачем =)

Б.Р.УТ на тестовой сцене

День 6. Декорирование уровней. Самый сложный день/ночь (как мне казалось). Ненависть к ассетам.

Я приступил к сборке уровней из ассетов со стора. И кто бы знал - КАК Я НЕНАВИЖУ АССЕТЫ!
Мало того, что сочетать разные паки между собой целое дело, так у них еще и качество заметно плавает. А я без художника!! 
Все классные ассеты кончились на персонажах врагов - дальше пошла полная жесть. 
Все арт ассеты для уровней имели проблемы - сломанные материалы, неоптимизированные сетки, неразделяемые куски, странные текстуры, лоды в префабах и меш коллайдеры. Или всё сразу из этого! Если бы у меня была нейронка, которая бы генерировала 3д ассеты, то у неё была бы всего одна проблема - плохая сетка и я бы это пережил как-нибудь.
Собрав первый уровень я заметил странный дроп фпс и посмотрел статы и фрейм дебаг. То, что я увидел поразило меня до глубины души - у меня на сцене ОДИН МУЛЬЁН треугольников! Откуда?! У меня всё лоу поли. Оказалось, что земля из одного ассета имеет 500к полигонов... Я скрепя душой убрал этот пол и стал искать текстуру. И тут выходят на сцену дефолтные материалы юнити - какие же они блестящие через "я". Я два часа потратил пытаясь подобрать текстуру или найти другой меш, но в итоге в первом уровне просто ровный пол без всего. Это уже была ночь, а мне еще нужно было обставить последнюю арену декором. Благо на последней сцене лёг один ассет как влитой. Он был и по теме и выглядел не плохо, но пол всё еще был отвратительный. Из за него всё сливается в коричневое месиво и читабельность сцены падает.  Мой, такой желанный, Триплэй разбивается о суровую ассетную реальность, сроки и чужую криворукость. =)
И так, последний день ночь - у меня работают первый уровень и второй уровень, диалоги разбросаны заметками в тетради и босс стоит на собранной арене. Нет ни одного звука, нет музыки, нет партиклов. Я иду спать готовясь встать в 6 утра, что бы игра была просто проходима.

3 июля 23:13.

РЕМАРКА. Я сейчас пишу это восстанавливая последовательность событий по коммитам и понимаю, что очень большая часть промежуточных крайне не стабильна. Это делает задачу сложнее...

День Х.

Я лёг в 2, что бы встать в 6 и сразу приступить к работе. Я не тестировал последнюю волну и у меня нет сценария на последний уровень + я не тестировал волны. Выглядит как изи катка, когда уже сделал остальное и знаешь, что именно нужно делать, но две бомбы ждут.

Первый сценарий.
Сценарий, который превратится в код. Дальше я прошу нейронку переписать всё это кодом на основе первого сценария, который я сделал сам.

Я специально строил архитектуру так, что бы потом просто написать - сделай так, потом так, потом сяк. Она не очень красивая, но надо было быстро и deepseek v4 flash отлично справился с маленькими (и не очень) модулями. Каждый сценарий отдельный объект и я могу миксовать их в любом порядке - они выполнятся хоть задом наперед.
Опять же - я бы предпочёл нодовый редактор, но где ж его взять (у меня на полке пяток висит для изучения, а руки всё не доходят) =)

И вот я всё написал и мне надо просто пройти игру от начала до конца.
Диалог перед битвой с боссом и юнити зависает на пол часа и падает. А потом еще раз и еще... А я в шоке - сижу с открытым ртом. У меня нет идей, что вообще происходит - все остальные сценарии работают без сбоев! Я говорю нейронке - ищи! И она ищет и ничего не находит - жалуется на диалоговый ассет и его конфликт с системой замедления времени. Я ей не верю - я знаю, что внутри ассета. Говорю - ищи дальше. И тут она меня разбудила - закомментируйте строки говорит она. И я начинаю лихорадочно всё комментировать. А это закоментируй, скомпилируй, сбрось процесс, загрузи заново - повтори. Я без понятия что происходит и она тоже. Дебаг - ложится. Нет ошибок, нет эксепшенов!
В итоге, первая бомба пошла - SquadDirector! Его использовал SpawnManager для того что бы собирать бойцов в формации (квадрат, круг, треугольник) и последняя волна должна была быть бесконечной, потому что для битвы с боссом нужны были шапки, которые в него надо было бросать. И что то пошло не так. Запрос формации в бесконечной волне вешал игру. Там явно был где то memory leak и вся память за секунду потреблялась и редактор падал.
Я выдохнул, поматерился и выключил отряды. Смахнув пот, я сел тестировать дальше.

И обнаружил, что посох не работает как надо. Вот не работает и всё.
Честно говоря он и так слегка сломан, но тут он вообще не делал, то что задумывалось. Враги летели не туда и не так. И вообще они не дамажили БРУТА! А должны были! =)
А время уже подходит, я уже поплыл - я буквально не понимаю, что за код я читаю, даже если этот код МОЙ!
Это была вторая бомба! Я уже не просто плыву - меня несёт. И я говорю - дипсик, фас! должно быть, а оно вот так! Он честно пыхтел и пытался решить, нашёл даже один маленький баг, но он не делал погоды в общей картине.

А теперь вернёмся в 5тый день и багу, который я там поправил - бойцы убивались об пол... и Я!! его исправил. Это была причина бага с посохом =)
CharacterController не может никак обрабатывать коллизии кроме как через OnControllerColliderHit, а на БРУТЕ был он и на врагах тоже он! =)
В общем, я поправил этот баг и всё полетело. Босс стал разваливаться за секунды, но меня это уже мало интересовало - игра была проходима именно так как я хотел. Но никто наверно не разобрался как пользоваться посохом - так что им пришлось попотеть (но это не точно).

Так как меня несло - я занялся мелким полишингом UI. Добавил катсцену в начале. Как мне думалось, починил переходы после проигрыша и прохождения. Нет - не починил.
Пол часа до окончания загрузки.
Я думаю, что всё - мне конец!
Я не успею! Сейчас будет сборка 2 часа, только шейдеров буду ждать 40 минут.
Всё зря! Жизнь - тлен! Если бы я курил, я бы закурил.
Понимаю, что никаких звуков я уже не соберу и ставлю сборку. И пишу письмо в редакцию - "простите, пожалуйста, вот билд только что поставил и всё такое..." А билд ВЖУХ! и собрался! Потому, что я не переключил бэкенд с MONO и я впервые был этому рад! =)
В общем, я залил билд и пошёл спать. Усталый, но довольный, что я дотащил проект до проходимого состояния и успел в срок!

Правила разработки, которые я нарушил на геймдежеме

1. Ни разу не прервался, не выдохнул и не взглянул свежим взглядом на то, что я делаю.
2. Не написал план по дням

Нейронки и хейт.

скоро на всех площадках мира

Давайте поговорим про нейронки и хейт, связанный с ними, о том как я их использовал в проекте, и почему я их использовал.
Первая причина - у меня было. Вторая причина - я был один как уже писал выше. Третья причина - я знал, что если буду писать сам, то буду париться о тех вещах, о которых на геймджеме париться не положено + я буду делать это медленнее. Четвёртая - я хотел быть больше геймдизайнером, чем кодером. В итоге, я использовал Suno, chatGPT, и в основном, конечно, я сидел с deepseek v4 flash и он меня ускорил кратно.

Deepseek - код агент. Хорошо писал мелкие системки, хорошо повторял за мной и даже иногда следовал код-стайлу. Да он так же замечательно помог стрельнуть себе в ногу, но это не его вина. Тут бы мне получше разбираться в некоторых аспектах и держать этот контекст в голове. Я же не потрудился попросить контекст фиксировать для других агентов и в итоге получил по лбу =) Честно говоря, я его многовато контроллировал на что тоже тратил время. Он иногда переписывал не очень важные вещи только потому, что я включал программисткое виденье.
В идеале, эту игру надо переписать на DOTS ECS с физикой и преферансом + запулить всё что можно и оптимизировать. Deepseek в плане оптимизации не стабилен. Он мне написал пару систем с пулом, когда я его не просил, а так где он был реально нужен - не написал =) хотя в код стайле сказано! Пулим! =)
В общем, он мне писал код лучше, чем я видел в том же диалоговом ассете или в других ассетах, которые выдают себя за продакшн реди решения.
Проблема с ним в том, что писать системки было очень быстро. Быстро можно было делать какой то полишинг и я часто этим увлекался. Тебе кажется, что это быстро, но более приоритетная задача простаивает, а всё что ты полишишь - надо тестировать всё равно! =)
В общем, можно заиграться. Я хотел быть геймдизом, но ПМом тоже надо было побыть =)
Да, я использовал подписку openCode GO и дипсик мне выходил в 1 доллар в день при том, что я его грузил просто постоянно!

chatGPT - генерация 2Д арта. Проблема генерации арта в том, что стиль чата видно... и он всех уже достал.
С другой стороны, я бы за неделю не нашёл и не нарисовал сам арт, который подошёл бы мне для этой игры. По этому генерация.
Правда скажи мне кто нибудь чуть раньше, что он не умеет в прозрачность, то я бы сохранил 8 долларов на подписке =)

гпт убился о прозрачность



Suno - генератор посредственности. Я как музыкант в прошлом очень не люблю её, но... референсы в незнакомых жанрах - круто, плейсхолдеры - круто! Я сидел с ней два месяца на платной подписке и даже собрал альбом своих песен с её аранжировками. Теперь они звучат как любой средний соул =) К сожалению или к счастью игровую музыку генерировать с ней плохая затея. Потому, что качество так себе. Стемы, которые она выдавала за multy track пол года назад были слишком грязные и лупится это всё плохо. Ну, и посредственно + дешёвая драмматургия + простые гармонии.  

Как итог.
Когда мы используем ассеты - это тоже сделал кто то другой. Они могут быть плейсхолдерами, а могут использоваться на постоянку. И почему то никто не кидается за реюз ассетов, за использование ассетов в принципе. Так что, я не понимаю претензии. Мне важна презентация моей игры и чем раньше я проверю свою идею - тем лучше. Чем лучше я её презентую - тем быстрее я найду команду и мы заменим все плейсхолдеры/ассеты и тд в соотвествтвии с бюджетом. Напомню, что я ненавижу ассеты и мне генерация нравится даже больше - она даёт больше гибкости как для владельца продукта. 
Да, она упрётся потолок заложенного, НО как плейсхолдер, как референс вполне себе ок.
В общем, попрошу без хейта!

Спасибо, что дочитали! Отдельное спасибо, если поиграли!
Спасибо организаторам за возможность поучаствовать! =)

Комментарии (0)

Войдите, чтобы написать комментарий

Войти
Large Spinner
NecroTech.exe
Версия 0.0.1
29
12
0
2
Жанр
ActionSurvival
Движок
Unity
Платформа
Windows
Язык
RU
Время игровой сессии
до 10 мин.
Дата публикации игры
27.06.2026
Дата обновления игры
04.07.2026