— Артур, ну что там?
(Ветер бьет в лицо, снег забивается под куртку, но впереди наконец виднеются очертания строений)
— Я нашел место, где можно укрыться!
Старый шахтерский городок. Заброшенный. Недалеко отсюда.
***
Узнали сцену? Не смог удержаться и притащил вам кадр с бэкстейджа. В прошлом посте вы залайкали идею с разбором механики снега, так что я перешел от слов к делу. Снимали вступление для видео о том, как реализовать реалистичные провалы при ходьбе.
Чтобы понять, как снег должен продавливаться под весом персонажа, пришлось самому поработать тестером и провалиться по пояс.
Сейчас осваиваю не только геймдев, но и съемку контента. Процесс непростой, но когда картинка оживает, это дает мощный заряд. Не обещаю, что ролик выйдет скоро, но обещаю, что он когда-нибудь точно увидит свет.
Разбор какой еще механики вам интересен? Сделаем из этого серию постов. 👇
(Ветер бьет в лицо, снег забивается под куртку, но впереди наконец виднеются очертания строений)
— Я нашел место, где можно укрыться!
Старый шахтерский городок. Заброшенный. Недалеко отсюда.
***
Узнали сцену? Не смог удержаться и притащил вам кадр с бэкстейджа. В прошлом посте вы залайкали идею с разбором механики снега, так что я перешел от слов к делу. Снимали вступление для видео о том, как реализовать реалистичные провалы при ходьбе.
Чтобы понять, как снег должен продавливаться под весом персонажа, пришлось самому поработать тестером и провалиться по пояс.
Сейчас осваиваю не только геймдев, но и съемку контента. Процесс непростой, но когда картинка оживает, это дает мощный заряд. Не обещаю, что ролик выйдет скоро, но обещаю, что он когда-нибудь точно увидит свет.
Разбор какой еще механики вам интересен? Сделаем из этого серию постов. 👇
🔥7👍2❤1
Media is too big
VIEW IN TELEGRAM
Есть игры, которые не устаревают.
Они просто ждут, пока ты до них дорастёшь.
Сегодня в руках снова PlayStation Portable. Та самая, с легким люфтом кнопок и звуком загрузки, который мгновенно переносит в 2008-й.
И я запускаю God of War: Ghost of Sparta.
⚔️ И вот что интересно сейчас я смотрю на неё уже не как игрок. А как разработчик.
Через призму геймдизайна.
Первое, что бросается в глаза это контроль ритма.
PSP слабая по железу. Никаких масштабных арен, толп NPC и «живых» миров.
Значит, каждое столкновение это сконцентрированная сцена.
Небольшая арена.
Четкий заход врагов волнами.
Пауза.
Новый тип противника.
Это не хаос. Это дирижирование вниманием.
🎯 Враги появляются не просто так. Каждый новый юнит это микро-урок.
Щитоносец - учит ломать защиту.
Быстрый враг - учит таймингам.
Тяжёлый - контролю дистанции.
Игра не повышает сложность цифрами. Она повышает когнитивную нагрузку.
📈 Это та самая ступенчатая кривая сложности, о которой мы постоянно говорим. Игрок освоился - получи новый слой. Освоил слой - держи комбинацию.
Причём всё это в рамках ограниченной платформы.
Нет права на лишнее. Каждая анимация читаемая.
Каждый бой как маленький экзамен.
И вот сидишь с этой маленькой консолью и понимаешь: хорошие ограничения рождают чистый дизайн.
Иногда полезно взять старую игру и разобрать её не на ностальгию, а на механики.
Очень отрезвляет.
Они просто ждут, пока ты до них дорастёшь.
Сегодня в руках снова PlayStation Portable. Та самая, с легким люфтом кнопок и звуком загрузки, который мгновенно переносит в 2008-й.
И я запускаю God of War: Ghost of Sparta.
⚔️ И вот что интересно сейчас я смотрю на неё уже не как игрок. А как разработчик.
Через призму геймдизайна.
Первое, что бросается в глаза это контроль ритма.
PSP слабая по железу. Никаких масштабных арен, толп NPC и «живых» миров.
Значит, каждое столкновение это сконцентрированная сцена.
Небольшая арена.
Четкий заход врагов волнами.
Пауза.
Новый тип противника.
Это не хаос. Это дирижирование вниманием.
🎯 Враги появляются не просто так. Каждый новый юнит это микро-урок.
Щитоносец - учит ломать защиту.
Быстрый враг - учит таймингам.
Тяжёлый - контролю дистанции.
Игра не повышает сложность цифрами. Она повышает когнитивную нагрузку.
📈 Это та самая ступенчатая кривая сложности, о которой мы постоянно говорим. Игрок освоился - получи новый слой. Освоил слой - держи комбинацию.
Причём всё это в рамках ограниченной платформы.
Нет права на лишнее. Каждая анимация читаемая.
Каждый бой как маленький экзамен.
И вот сидишь с этой маленькой консолью и понимаешь: хорошие ограничения рождают чистый дизайн.
Иногда полезно взять старую игру и разобрать её не на ностальгию, а на механики.
Очень отрезвляет.
👍3🔥2
Векторная ярость или как научить моба преследовать цель 🏹
🛠 Помимо работы над основным проектом, я стараюсь каждый день тренироваться на кошках. Это помогает не закиснуть в одних и тех же задачах и набивать руку в Unity на тех вещах, которые в карточной игре могут и не пригодиться, но в геймдеве считаются базой.
Сегодня моим полигоном стал спавн врагов и логика преследования игрока.
📐 Все начинается с векторов. Если мы хотим, чтобы враг двигался к цели, нам нужно вычислить направление. Математика тут простая, но фундаментальная: мы берем позицию игрока и вычитаем из неё позицию самого врага. В итоге получаем вектор, указывающий точно на цель.
direction = target.position - transform.position
(Помните пост про операции над векторами?)
🧠 Но просто получить направление мало. Если оставить всё как есть, скорость врага будет зависеть от расстояния: чем дальше игрок, тем быстрее несется моб. Чтобы этого избежать, мы используем нормализацию. Она приводит длину вектора к единице, сохраняя только направление. Теперь, на какое бы расстояние ни убежал игрок, враг будет преследовать его с четко заданной скоростью.
🕹 Еще один важный апгрейд сегодня переход на CharacterController. Раньше я мог просто двигать объект через transform.position, но это путь костылей. В таком случае объект превращается в привидение, которое проходит сквозь стены и игнорирует гравитацию. CharacterController это специальный компонент, который берет на себя всю грязную работу: он сам обрабатывает столкновения с препятствиями, позволяет персонажу заходить на ступеньки и не дает ему проваливаться сквозь землю.
Завтра попробую усложнить систему и добавить врагам немного мозгов, чтобы они не просто шли в лоб, а пытались окружить игрока.
🛠 Помимо работы над основным проектом, я стараюсь каждый день тренироваться на кошках. Это помогает не закиснуть в одних и тех же задачах и набивать руку в Unity на тех вещах, которые в карточной игре могут и не пригодиться, но в геймдеве считаются базой.
Сегодня моим полигоном стал спавн врагов и логика преследования игрока.
📐 Все начинается с векторов. Если мы хотим, чтобы враг двигался к цели, нам нужно вычислить направление. Математика тут простая, но фундаментальная: мы берем позицию игрока и вычитаем из неё позицию самого врага. В итоге получаем вектор, указывающий точно на цель.
direction = target.position - transform.position
(Помните пост про операции над векторами?)
🧠 Но просто получить направление мало. Если оставить всё как есть, скорость врага будет зависеть от расстояния: чем дальше игрок, тем быстрее несется моб. Чтобы этого избежать, мы используем нормализацию. Она приводит длину вектора к единице, сохраняя только направление. Теперь, на какое бы расстояние ни убежал игрок, враг будет преследовать его с четко заданной скоростью.
🕹 Еще один важный апгрейд сегодня переход на CharacterController. Раньше я мог просто двигать объект через transform.position, но это путь костылей. В таком случае объект превращается в привидение, которое проходит сквозь стены и игнорирует гравитацию. CharacterController это специальный компонент, который берет на себя всю грязную работу: он сам обрабатывает столкновения с препятствиями, позволяет персонажу заходить на ступеньки и не дает ему проваливаться сквозь землю.
Завтра попробую усложнить систему и добавить врагам немного мозгов, чтобы они не просто шли в лоб, а пытались окружить игрока.
❤4🔥1🤔1
КОНТРОЛЬ ИЛИ ИЛЛЮЗИЯ, ПОЧЕМУ ЧЕСТНАЯ ФИЗИКА ЭТО ЛОВУШКА 🕹🧱
В геймдеве есть одна опасная иллюзия, кажется, что чем точнее мы имитируем реальный мир, тем круче будет игра. Но на деле игрок ищет не реализм, а отзывчивость.
Под прошлым постом закинули мысль, что Rigidbody — это фигня для управления. И в этом есть доля правды, если мы говорим о чувстве персонажа. Давайте по порядку.
⚙️ Rigidbody - симуляция физики.
Когда ты вешаешь на игрока Rigidbody, ты применяешь к объекту физику. Теперь у персонаж есть масса, трение и инерция.
Но вот в чем проблема - инерция превращает героя в корову на льду. Ты отпустил кнопку, а он всё ещё скользит к пропасти. Трение заставляет его буквально липнуть к стенам при прыжке.
Физический движок считает мир в своем ритме (FixedUpdate), и это часто создает микро-лаги между нажатием и движением.
📐CharacterController дело другое, тут не физика, тут кинематика. Это не физический объект, это математическая абстракция.
🔹 Нулевая дистанция. Ты диктуешь каждый миллиметр движения.
Хочешь мгновенную остановку? Пожалуйста.
Хочешь резкий рывок? Никаких проблем.
🔹 Умная геометрия. Он из коробки знает, как заходить на ступеньки и как скользить вдоль стен, не застревая в коллайдерах. В параметрах инспектора есть флажки.
🔹 Предсказуемость. Твой персонаж больше не улетит в космос, если в него случайно врежется коробка с бешеной скоростью.
Так что же выбрать?
Все зависит от того, какое ощущение от игры вам нужно.
CharacterController это стандарт для FPS, TPS и платформеров. Выбирайте если вам нужно, чтобы персонаж был резким, послушным и предсказуемым.
Rigidbody незаменим там, где физика и есть геймплей. Машины в GTA, тела в Gang Beasts или разрушаемое окружение. Здесь хаос и непредсказуемость это фича, а не баг.
🎯 Вердикт
Инструмент не должен мешать.
Говорить, что Rigidbody это фигня, это как ругать молоток за то, что им неудобно резать хлеб.
Если ты делаешь Human: Fall Flat или гонки, где физика — это и есть фан, Rigidbody твой единственный путь.
Хороший дизайн это умение вовремя подделать реальность, чтобы игроку было удобно. Мы не строим мир, мы создаем ощущение мира.
В геймдеве есть одна опасная иллюзия, кажется, что чем точнее мы имитируем реальный мир, тем круче будет игра. Но на деле игрок ищет не реализм, а отзывчивость.
Под прошлым постом закинули мысль, что Rigidbody — это фигня для управления. И в этом есть доля правды, если мы говорим о чувстве персонажа. Давайте по порядку.
⚙️ Rigidbody - симуляция физики.
Когда ты вешаешь на игрока Rigidbody, ты применяешь к объекту физику. Теперь у персонаж есть масса, трение и инерция.
Но вот в чем проблема - инерция превращает героя в корову на льду. Ты отпустил кнопку, а он всё ещё скользит к пропасти. Трение заставляет его буквально липнуть к стенам при прыжке.
Физический движок считает мир в своем ритме (FixedUpdate), и это часто создает микро-лаги между нажатием и движением.
📐CharacterController дело другое, тут не физика, тут кинематика. Это не физический объект, это математическая абстракция.
🔹 Нулевая дистанция. Ты диктуешь каждый миллиметр движения.
Хочешь мгновенную остановку? Пожалуйста.
Хочешь резкий рывок? Никаких проблем.
🔹 Умная геометрия. Он из коробки знает, как заходить на ступеньки и как скользить вдоль стен, не застревая в коллайдерах. В параметрах инспектора есть флажки.
🔹 Предсказуемость. Твой персонаж больше не улетит в космос, если в него случайно врежется коробка с бешеной скоростью.
Так что же выбрать?
Все зависит от того, какое ощущение от игры вам нужно.
CharacterController это стандарт для FPS, TPS и платформеров. Выбирайте если вам нужно, чтобы персонаж был резким, послушным и предсказуемым.
Rigidbody незаменим там, где физика и есть геймплей. Машины в GTA, тела в Gang Beasts или разрушаемое окружение. Здесь хаос и непредсказуемость это фича, а не баг.
🎯 Вердикт
Инструмент не должен мешать.
Говорить, что Rigidbody это фигня, это как ругать молоток за то, что им неудобно резать хлеб.
Если ты делаешь Human: Fall Flat или гонки, где физика — это и есть фан, Rigidbody твой единственный путь.
Хороший дизайн это умение вовремя подделать реальность, чтобы игроку было удобно. Мы не строим мир, мы создаем ощущение мира.
🔥4👍1🤯1
🗺 Свобода. Которой нет.
Люблю открытые миры. Огромная карта, можно идти куда угодно, делать что угодно. Но если чуть остановиться и посмотреть трезво, то в 80% случаев нас очень аккуратно ведут за руку.
Это иллюзия свободы.
Вроде бы перед тобой весь мир, но:
🔹 Горы расставлены так, чтобы ты шёл по нужной долине.
🔹 Разрушенные мосты мягко ограничивают ранний доступ к локациям.
🔹 Враги “случайно” слишком сильные, если ты пошёл не туда.
🔹 Точки интереса стоят так, чтобы ты видел следующую с предыдущей.
Ты выбираешь направление.
Но варианты уже заранее спроектированы.
И самое интересное это не обман. Это необходимость.
Полная свобода в игре почти всегда ломает ритм, нарратив и сложность. Игрок может пропустить важную механику, прийти неподготовленным к боссу или просто заскучать в пустоте.
Поэтому дизайнер строит мир как систему мягких коридоров. Не стены, а направляющие. Не запрет, а подсказка через окружение, свет, композицию кадра.
С инженерной точки зрения это вообще отдельная магия. Навмеши режутся по уровням прогрессии. Триггеры подгружают события в нужной последовательности. Спавн противников контролирует темп. Даже камера иногда чуть-чуть корректирует угол, чтобы ты смотрел “туда куда надо”. Замечали такое, да?
И вот парадокс. Если игрок замечает ограничения то магия рушится, а если нет то мир кажется живым.
Вопрос к вам. Вам важнее реальная свобода с хаосом или хорошо поставленная иллюзия, но с сильным ритмом и историей?
Люблю открытые миры. Огромная карта, можно идти куда угодно, делать что угодно. Но если чуть остановиться и посмотреть трезво, то в 80% случаев нас очень аккуратно ведут за руку.
Это иллюзия свободы.
Вроде бы перед тобой весь мир, но:
🔹 Горы расставлены так, чтобы ты шёл по нужной долине.
🔹 Разрушенные мосты мягко ограничивают ранний доступ к локациям.
🔹 Враги “случайно” слишком сильные, если ты пошёл не туда.
🔹 Точки интереса стоят так, чтобы ты видел следующую с предыдущей.
Ты выбираешь направление.
Но варианты уже заранее спроектированы.
И самое интересное это не обман. Это необходимость.
Полная свобода в игре почти всегда ломает ритм, нарратив и сложность. Игрок может пропустить важную механику, прийти неподготовленным к боссу или просто заскучать в пустоте.
Поэтому дизайнер строит мир как систему мягких коридоров. Не стены, а направляющие. Не запрет, а подсказка через окружение, свет, композицию кадра.
С инженерной точки зрения это вообще отдельная магия. Навмеши режутся по уровням прогрессии. Триггеры подгружают события в нужной последовательности. Спавн противников контролирует темп. Даже камера иногда чуть-чуть корректирует угол, чтобы ты смотрел “туда куда надо”. Замечали такое, да?
И вот парадокс. Если игрок замечает ограничения то магия рушится, а если нет то мир кажется живым.
Вопрос к вам. Вам важнее реальная свобода с хаосом или хорошо поставленная иллюзия, но с сильным ритмом и историей?
🔥1
Финальный рубеж или почему код писать проще, чем снимать отчет 🎬
🏁 Сегодня финишная прямая. Завтра выходит следующий девлог и наше первое MVP. План на день максимально простой - немного причешу код, сделаю легкий рефакторинг и на этом всё. На сегодня, да и на весь этот месяц, работы точно хватит. Остаток дня планирую просто выдохнуть и набраться сил перед завтрашним рывком.
🎥 А завтра меня ждет то, что до сих пор дается с огромным трудом съемка отчета. Эмоционально это выматывает сильнее, чем самый сложный код. Снимать себя дело вообще неблагодарное. Если не верите, попробуйте как нибудь просто пообщаться с камерой хотя бы десять минут один на один. Сразу поймете, каково это быть в объективе.
📝 Адуха начинается когда нужно снимать по плану или тексту. Пиши пропало, сразу начинаешь заикаться, слова вылетают из головы, а на пустом месте накрывает нервяк.
⏳ Искренне надеюсь, что это просто отсутствие привычки и со временем это пройдет. Пока же каждый такой отчет это маленькая битва с самим собой. Но результат того стоит, ведь именно так фиксируется история проекта.
До завтра, друзья. Завтра будем подводить итоги месяца и смотреть, что у нас получилось.
🏁 Сегодня финишная прямая. Завтра выходит следующий девлог и наше первое MVP. План на день максимально простой - немного причешу код, сделаю легкий рефакторинг и на этом всё. На сегодня, да и на весь этот месяц, работы точно хватит. Остаток дня планирую просто выдохнуть и набраться сил перед завтрашним рывком.
🎥 А завтра меня ждет то, что до сих пор дается с огромным трудом съемка отчета. Эмоционально это выматывает сильнее, чем самый сложный код. Снимать себя дело вообще неблагодарное. Если не верите, попробуйте как нибудь просто пообщаться с камерой хотя бы десять минут один на один. Сразу поймете, каково это быть в объективе.
📝 Адуха начинается когда нужно снимать по плану или тексту. Пиши пропало, сразу начинаешь заикаться, слова вылетают из головы, а на пустом месте накрывает нервяк.
⏳ Искренне надеюсь, что это просто отсутствие привычки и со временем это пройдет. Пока же каждый такой отчет это маленькая битва с самим собой. Но результат того стоит, ведь именно так фиксируется история проекта.
До завтра, друзья. Завтра будем подводить итоги месяца и смотреть, что у нас получилось.
❤2
Большинство инди-проектов загибаются в первые 30 дней.
Наш выжил и только что научился дышать.
Сегодня выходит второй девлог, а вместе с ним и самая первая версия нашей игры.
https://youtu.be/y86hiJlxTJo
Месяц со старта пролетел как один день. То, что вы увидите сейчас это еще не игра. Это скелет, технодемка, срез работы за 30 дней. Она пока выглядит несуразно, не умеет разговаривать и спотыкается на каждом шагу. Но это её первые шаги, и я хочу, чтобы вы к ним прикоснулись.
Я чертовски горд тем, какой путь мы прошли с командой. Мы притерлись, выстроили процессы и начали работать как единый механизм. Ребята, спасибо вам! Без вашей отдачи этот "скелет" так и остался бы набором пустых папок на диске.
Конечно, мне страшно. Огромный монстр-самозванец всё еще стоит за спиной и шепчет: "Брось это, вы сделали шляпу, которую можно собрать на коленке за вечер".
Но это вранье.
Эта работа идет изнутри, она намного глубже, чем кажется.
Я обещаю - мы доведем её до совершенства.
Мы научим её всему. А пока просто посмотрите на это начало.
Запомните этот момент. Момент рождения.
Наш выжил и только что научился дышать.
Сегодня выходит второй девлог, а вместе с ним и самая первая версия нашей игры.
https://youtu.be/y86hiJlxTJo
Месяц со старта пролетел как один день. То, что вы увидите сейчас это еще не игра. Это скелет, технодемка, срез работы за 30 дней. Она пока выглядит несуразно, не умеет разговаривать и спотыкается на каждом шагу. Но это её первые шаги, и я хочу, чтобы вы к ним прикоснулись.
Я чертовски горд тем, какой путь мы прошли с командой. Мы притерлись, выстроили процессы и начали работать как единый механизм. Ребята, спасибо вам! Без вашей отдачи этот "скелет" так и остался бы набором пустых папок на диске.
Конечно, мне страшно. Огромный монстр-самозванец всё еще стоит за спиной и шепчет: "Брось это, вы сделали шляпу, которую можно собрать на коленке за вечер".
Но это вранье.
Эта работа идет изнутри, она намного глубже, чем кажется.
Я обещаю - мы доведем её до совершенства.
Мы научим её всему. А пока просто посмотрите на это начало.
Запомните этот момент. Момент рождения.
🔥7👍2🥰1
Самое страшное это открыть двери своей мастерской, в которой еще пахнет опилками и клеем, и сказать смотрите.
Показать первый билд это как выйти на сцену без сценария. Я прекрасно понимаю, что вы увидите что то несуразное, дерганые анимации и отсутствие звуков. Но я то вижу другое. Я вижу недели бессонных ночей над архитектурой, вылизанный GameFlow и фундамент, который не развалится от первой же новой идеи.
И вот тут просыпается главный страх. А что, если вы посмотрите и скажете: "И это всё? Мы ждали игру, а ты принес нам набор скриптов, который можно накидать за вечер".
Этот вопрос "и это все?" самый болезненный для любого разработчика. Хочется закрыться, допилить всё до идеала и показать уже конфету. Но я сознательно иду на этот риск. Игре нужно выйти из стерильного вакуума и столкнуться с реальностью. Даже если эта реальность будет бить больно.
Я не жду похвалы. Сейчас мне нужно ваше честное «фи». Ткните меня носом в то, что бесит, что непонятно, что кажется лишним. Только через этот фидбек, через ваши правки и критику, этот скелет начнет обрастать мясом.
Двери открыты. Заходите, но не пугайтесь беспорядка мы тут только начали.
Показать первый билд это как выйти на сцену без сценария. Я прекрасно понимаю, что вы увидите что то несуразное, дерганые анимации и отсутствие звуков. Но я то вижу другое. Я вижу недели бессонных ночей над архитектурой, вылизанный GameFlow и фундамент, который не развалится от первой же новой идеи.
И вот тут просыпается главный страх. А что, если вы посмотрите и скажете: "И это всё? Мы ждали игру, а ты принес нам набор скриптов, который можно накидать за вечер".
Этот вопрос "и это все?" самый болезненный для любого разработчика. Хочется закрыться, допилить всё до идеала и показать уже конфету. Но я сознательно иду на этот риск. Игре нужно выйти из стерильного вакуума и столкнуться с реальностью. Даже если эта реальность будет бить больно.
Я не жду похвалы. Сейчас мне нужно ваше честное «фи». Ткните меня носом в то, что бесит, что непонятно, что кажется лишним. Только через этот фидбек, через ваши правки и критику, этот скелет начнет обрастать мясом.
Двери открыты. Заходите, но не пугайтесь беспорядка мы тут только начали.
👍4
Вчера провели встречу с командой и утвердили задачи на ближайший месяц. Как и говорил в девлоге, наш главный приоритет и самая критичная задача сейчас это CMS.
Помимо этого, план такой:
🔹 Улучшение визуала. Будем делать картинку сочнее.
🔹 Экономика. Прорабатываем баланс и логику цифр.
🔹 Магазин. Улучшим функционал и наполнение.
Фиксирую эти цели здесь, чтобы через месяц мы вместе посмотрели на результат. Будем удивлять, обещаю.
Завтра приступаю к работе, а пока заслуженный отдых.
Помимо этого, план такой:
🔹 Улучшение визуала. Будем делать картинку сочнее.
🔹 Экономика. Прорабатываем баланс и логику цифр.
🔹 Магазин. Улучшим функционал и наполнение.
Фиксирую эти цели здесь, чтобы через месяц мы вместе посмотрели на результат. Будем удивлять, обещаю.
Завтра приступаю к работе, а пока заслуженный отдых.
🔥2
🛠 Вчера упоминал, что наш главный приоритет на месяц это CMS. Давайте разберем по-простому, что это и зачем оно нужно в карточной игре.
📄 CMS (Content Management System) это система управления контентом. Представьте себе админку сайта, только для игры. Это прослойка, которая отделяет код от данных (цифры, описания, картинки).
⚙️ Зачем это нужно? Без CMS любая правка превращается в ад. Если я хочу изменить урон карты с 10 на 12, мне не нужно лезть в код и пересобирать проект. Я просто меняю цифру в таблице и она обновляется в игре. Это избавляет от хардкода, когда данные зашиты намертво.
🚀 Масштабируемость. Когда у тебя 5 карт, их можно настроить руками. Когда их 500 нужна система, которая сама распределит статы, подтянет нужные спрайты и описания. CMS это фундамент, который позволит нам закидывать в игру тонны контента, не ломая при этом всё остальное.
В следующем посте расскажу, на чем именно мы решили это собирать. 🃏🛠
📄 CMS (Content Management System) это система управления контентом. Представьте себе админку сайта, только для игры. Это прослойка, которая отделяет код от данных (цифры, описания, картинки).
⚙️ Зачем это нужно? Без CMS любая правка превращается в ад. Если я хочу изменить урон карты с 10 на 12, мне не нужно лезть в код и пересобирать проект. Я просто меняю цифру в таблице и она обновляется в игре. Это избавляет от хардкода, когда данные зашиты намертво.
🚀 Масштабируемость. Когда у тебя 5 карт, их можно настроить руками. Когда их 500 нужна система, которая сама распределит статы, подтянет нужные спрайты и описания. CMS это фундамент, который позволит нам закидывать в игру тонны контента, не ломая при этом всё остальное.
В следующем посте расскажу, на чем именно мы решили это собирать. 🃏🛠
🔥3
🛠 Продолжаем про CMS. Сегодня про то, как мы реализуем эту систему под капотом. В Unity есть несколько путей, и мы выбрали самый гибкий для нашей команды.
💾 Scriptable Objects. Это база. В Unity это специальные контейнеры для данных, которые не висят в памяти мертвым грузом, а подгружаются только когда нужны. Каждая карта в нашей игре это отдельный файл Scriptable Object, в котором лежат её характеристики, эффекты и ссылки на анимации.
☁️ В будущем есть идея увезти все в таблички. Создавать вручную 200 файлов сомнительное удовольствие, а вот если использовать внешний источник данных (например, Google Sheets или локальные CSV/JSON). Геймдизайнер правит баланс в удобной таблице, а специальный скрипт-парсер в один клик обновляет все Scriptable Objects в проекте.
⚡️ Почему это круто?
1. Скорость: правки вносятся за секунды.
2. Безопасность: баланс не меняется в коде и ничего там не ломает.
3. Порядок: все данные лежат в одном месте, а не размазаны по сценам и префабам.
Дальше расскажу про технические приколы как мы заставляем всё это добро работать с локализацией и не путаться в версиях данных. 🃏🛠
💾 Scriptable Objects. Это база. В Unity это специальные контейнеры для данных, которые не висят в памяти мертвым грузом, а подгружаются только когда нужны. Каждая карта в нашей игре это отдельный файл Scriptable Object, в котором лежат её характеристики, эффекты и ссылки на анимации.
☁️ В будущем есть идея увезти все в таблички. Создавать вручную 200 файлов сомнительное удовольствие, а вот если использовать внешний источник данных (например, Google Sheets или локальные CSV/JSON). Геймдизайнер правит баланс в удобной таблице, а специальный скрипт-парсер в один клик обновляет все Scriptable Objects в проекте.
⚡️ Почему это круто?
1. Скорость: правки вносятся за секунды.
2. Безопасность: баланс не меняется в коде и ничего там не ломает.
3. Порядок: все данные лежат в одном месте, а не размазаны по сценам и префабам.
Дальше расскажу про технические приколы как мы заставляем всё это добро работать с локализацией и не путаться в версиях данных. 🃏🛠
🔥5👍1
🛠 Финальный штрих в разговоре про CMS это локализация. Даже если сейчас игра только на русском, закладывать фундамент под мультиязычность нужно уже на этапе скелета.
🆔 Ключи вместо текста. В самой игре мы никогда не пишем Огненный шар. Там стоит ключ, например, card_fireball_name. А наша CMS уже сама лезет в таблицу локализации и подставляет нужную строку в зависимости от выбранного языка.
📂 Все языки в одном месте. Сейчас это пока что в l10n Unity, но когда нибудь переедет в Google-таблицу. А дальше при переводе видем столбик с русским текстом и рядом заполняем столбик с английским. Остается только нажать кнопку обновить, и вуаля игра заговорила на другом языке.
🚀 Прогнозируем итог месяца. Потратив время на CMS сейчас, мы сэкономили себе сотни часов в будущем. Мы сможем добавлять карты, менять баланс и переводить игру на китайский, не написав при этом ни строчки нового кода.
Как база контента будет готова, начнем переходить к визуалу и экономике! 🃏🛠
🆔 Ключи вместо текста. В самой игре мы никогда не пишем Огненный шар. Там стоит ключ, например, card_fireball_name. А наша CMS уже сама лезет в таблицу локализации и подставляет нужную строку в зависимости от выбранного языка.
📂 Все языки в одном месте. Сейчас это пока что в l10n Unity, но когда нибудь переедет в Google-таблицу. А дальше при переводе видем столбик с русским текстом и рядом заполняем столбик с английским. Остается только нажать кнопку обновить, и вуаля игра заговорила на другом языке.
🚀 Прогнозируем итог месяца. Потратив время на CMS сейчас, мы сэкономили себе сотни часов в будущем. Мы сможем добавлять карты, менять баланс и переводить игру на китайский, не написав при этом ни строчки нового кода.
Как база контента будет готова, начнем переходить к визуалу и экономике! 🃏🛠
👍2
Я смотрю на вас и вижу всё новые лица...
Это значит, что вы нарушили первое и второе правило нашего клуба.
Черт возьми, мы вкалываем на скучных проектах, пишем однотипный софт и гнем спины в офисах на задачах для бизнеса.
Нас дразнят красивыми трейлерами ААА-игр, купленными на бюджеты небольших стран. Мы тратим время на фичи, которые никому не нужны, ради KPI, которые нам не важны.
Мы пасынки индустрии, ребята. Мы невостребованны в большом геймдеве, у нас нет своей "великой войны" или "великой депрессии". Наша война это война за внимание игрока. Наша депрессия это голый скелет прототипа без анимаций и звука.
Интернеты внушили нам веру в то, что каждый инди-разработчик станет миллионером, сорвет куш в Steam и проснется звездой. Всё вранье. И мы начали это осознавать.
Но именно эта ярость и заставляет нас собирать свои системы, ковырять шейдеры и строить миры из ничего.
Нас уже 50. Добро пожаловать в клуб 🛠🔥
PS. Время идет и вот нас уже так много, спасибо ребят, я очень рад что вы вместе со мной. Если знаете ещё таких же безумцев приглашайте.
Кажется, клубу нужно больше нарушителей правил.
Это значит, что вы нарушили первое и второе правило нашего клуба.
Черт возьми, мы вкалываем на скучных проектах, пишем однотипный софт и гнем спины в офисах на задачах для бизнеса.
Нас дразнят красивыми трейлерами ААА-игр, купленными на бюджеты небольших стран. Мы тратим время на фичи, которые никому не нужны, ради KPI, которые нам не важны.
Мы пасынки индустрии, ребята. Мы невостребованны в большом геймдеве, у нас нет своей "великой войны" или "великой депрессии". Наша война это война за внимание игрока. Наша депрессия это голый скелет прототипа без анимаций и звука.
Интернеты внушили нам веру в то, что каждый инди-разработчик станет миллионером, сорвет куш в Steam и проснется звездой. Всё вранье. И мы начали это осознавать.
Но именно эта ярость и заставляет нас собирать свои системы, ковырять шейдеры и строить миры из ничего.
Нас уже 50. Добро пожаловать в клуб 🛠🔥
PS. Время идет и вот нас уже так много, спасибо ребят, я очень рад что вы вместе со мной. Если знаете ещё таких же безумцев приглашайте.
Кажется, клубу нужно больше нарушителей правил.
🔥7😁1🤔1💯1
🛠 CMS вовсю развивается, и теперь в игре появляется выбор героев, с которых мы стартуем забеги. Это важный шаг для реиграбельности каждый заход должен ощущаться по-новому прямо с порога.
🃏 Выбор героя напрямую влияет на две вещи: стартовую колоду юнитов и пассивные бафы, которые действуют на протяжении всего рана. По сути, герой — это ваш архетип, который задает вектор развития всей колоды.
🎲 Один может давать бонус к золоту после боя, другой усиливать юнитов определенного типа, а третий, например, позволит чаще рероллить магазин в поисках нужной карты. Это те самые переменные, которые заставляют игрока адаптироваться и пробовать разные стратегии.
💡 У меня уже есть список базовых перков, но хочется чего-то более интересного. Есть идеи, какими способностями можно было бы наделить героев? Может, кто-то должен получать бонусы за накопленное золото, а кто-то становиться сильнее, когда у него остается мало здоровья?
Пишите свои варианты, самые крутые идеи будем пробовать реализовать. 🃏🛠
🃏 Выбор героя напрямую влияет на две вещи: стартовую колоду юнитов и пассивные бафы, которые действуют на протяжении всего рана. По сути, герой — это ваш архетип, который задает вектор развития всей колоды.
🎲 Один может давать бонус к золоту после боя, другой усиливать юнитов определенного типа, а третий, например, позволит чаще рероллить магазин в поисках нужной карты. Это те самые переменные, которые заставляют игрока адаптироваться и пробовать разные стратегии.
💡 У меня уже есть список базовых перков, но хочется чего-то более интересного. Есть идеи, какими способностями можно было бы наделить героев? Может, кто-то должен получать бонусы за накопленное золото, а кто-то становиться сильнее, когда у него остается мало здоровья?
Пишите свои варианты, самые крутые идеи будем пробовать реализовать. 🃏🛠
❤1
📐 Смена контекста, давайте переключимся с кода на 3D
После 10 лет в бэкенде и суровой архитектуре, глаз иногда замыливается от бесконечных строк кода и логических цепочек. В геймдеве круто то, что ты можешь в любой момент нажать паузу на кодинге и пойти руками потрогать визуал своего проекта.
Для меня изучение 3D это не просто попытка "нарисовать модельку". Это способ понять, как устроена игра изнутри, от первого вертекса до финального пикселя на экране. Когда ты сам настраиваешь свет и режешь UV-развертку, ты начинаешь по-другому смотреть на оптимизацию и рендер в движке.
Вот база, которую стоит знать любому инди-разработчику:
1️⃣ Blockout - накидываем форму простыми кубами. Проверяем масштаб и геймплей.
2️⃣ High-poly / Low-poly - делаем детальную модель (миллионы полигонов) и её упрощенную копию для игры.
3️⃣ UV-unwrapping - разрезаем 3D-модель на плоскость, чтобы наложить текстуру.
4️⃣ Baking - переносим детали с тяжелой модели на легкую через карты нормалей.
5️⃣ Texturing & Shading - наводим красоту металл, дерево, грязь, блики.
Всю неделю будем говорить про геометрию. Без духоты, но с глубоким погружением. Разберем методы моделинга, поговорим о"святой троице" полигонов и выясним, почему плохая топология это приговор для производительности.
Погнали в мир трехмерного пространства! 🚀
После 10 лет в бэкенде и суровой архитектуре, глаз иногда замыливается от бесконечных строк кода и логических цепочек. В геймдеве круто то, что ты можешь в любой момент нажать паузу на кодинге и пойти руками потрогать визуал своего проекта.
Для меня изучение 3D это не просто попытка "нарисовать модельку". Это способ понять, как устроена игра изнутри, от первого вертекса до финального пикселя на экране. Когда ты сам настраиваешь свет и режешь UV-развертку, ты начинаешь по-другому смотреть на оптимизацию и рендер в движке.
Вот база, которую стоит знать любому инди-разработчику:
1️⃣ Blockout - накидываем форму простыми кубами. Проверяем масштаб и геймплей.
2️⃣ High-poly / Low-poly - делаем детальную модель (миллионы полигонов) и её упрощенную копию для игры.
3️⃣ UV-unwrapping - разрезаем 3D-модель на плоскость, чтобы наложить текстуру.
4️⃣ Baking - переносим детали с тяжелой модели на легкую через карты нормалей.
5️⃣ Texturing & Shading - наводим красоту металл, дерево, грязь, блики.
Всю неделю будем говорить про геометрию. Без духоты, но с глубоким погружением. Разберем методы моделинга, поговорим о"святой троице" полигонов и выясним, почему плохая топология это приговор для производительности.
Погнали в мир трехмерного пространства! 🚀
🔥4🤔1
🏠 Моя первая миниатюра в Blender: Шейдеры, развертка и процедурная трава
Я не сдаюсь, как и сказал каждый день по полчасика блендера, и вот что я смог сделать за уже 16 часов в программе.
Оказалось, собрать саму геометрию из кубов и цилиндров это даже не половина дела. Настоящая магия начинается потом.
Чтобы домик выглядел живым, мне пришлось погрузиться в целый новый мир:
📦 UV-развертка.
Это когда ты буквально разрезаешь 3D-модель и разворачиваешь её на плоскости, как шкуру медведя, чтобы правильно наложить текстуру.
🎨 Шейдеры.
Почти тоже что и в юнити. Работа с нодами, чтобы материалы отражали свет, имели нужную шероховатость и выглядели вкусно.
🌱 Генерация.
Пришлось повозиться с настройкой генерации травы, чтобы лужайка вокруг не казалась лысым зеленым блином.
Это отличная тренировка, которая прокачивает понимание того, как вообще работает свет, материалы и рендер.
Завтра поговорим о том, какими вообще путями можно создавать форму в 3D.
А пока оцените домик в комментариях! 👇
Я не сдаюсь, как и сказал каждый день по полчасика блендера, и вот что я смог сделать за уже 16 часов в программе.
Оказалось, собрать саму геометрию из кубов и цилиндров это даже не половина дела. Настоящая магия начинается потом.
Чтобы домик выглядел живым, мне пришлось погрузиться в целый новый мир:
📦 UV-развертка.
Это когда ты буквально разрезаешь 3D-модель и разворачиваешь её на плоскости, как шкуру медведя, чтобы правильно наложить текстуру.
🎨 Шейдеры.
Почти тоже что и в юнити. Работа с нодами, чтобы материалы отражали свет, имели нужную шероховатость и выглядели вкусно.
🌱 Генерация.
Пришлось повозиться с настройкой генерации травы, чтобы лужайка вокруг не казалась лысым зеленым блином.
Это отличная тренировка, которая прокачивает понимание того, как вообще работает свет, материалы и рендер.
Завтра поговорим о том, какими вообще путями можно создавать форму в 3D.
А пока оцените домик в комментариях! 👇
👍6🔥3
🛠 Скульпт, Булиан или Полигоны? Как вообще делают 3D
Если вы думаете, что все 3D-модели делаются одинаково, то добро пожаловать в клуб заблуждающихся (я сам там недавно был). В 3D есть несколько кардинально разных подходов:
🗿 Скульптинг (Sculpting): Это цифровая глина. Вы берете кисть и буквально лепите монстра, добавляя морщины и шрамы. Идеально для органики (персонажи, животные). Минус? Модель получается невероятно тяжелой, и в игру её просто так не запихнешь нужна ретопология (об этом позже).
✂️ Булиан (Boolean): Берем куб, вычитаем из него сферу получаем выемку. Отлично подходит для быстрого драфта сложных хард-сюрфейс деталей (пушки, механизмы). Минус — оставляет после себя просто чудовищно грязную сетку, и снова привет ретопологии.
🧊 Полигональное моделирование (Subdiv / Box modeling): Классика. Берем точку, тянем грань, создаем полигон. Медленно, вдумчиво, как игра в шахматы. Именно тут рождается самая правильная, чистая и оптимизированная геометрия.
Я сейчас ковыряю именно полигональное моделирование. А завтра расскажу, почему в этом методе есть свои строгие законы, нарушив которые, можно получить бомбу замедленного действия. 💣
Если вы думаете, что все 3D-модели делаются одинаково, то добро пожаловать в клуб заблуждающихся (я сам там недавно был). В 3D есть несколько кардинально разных подходов:
🗿 Скульптинг (Sculpting): Это цифровая глина. Вы берете кисть и буквально лепите монстра, добавляя морщины и шрамы. Идеально для органики (персонажи, животные). Минус? Модель получается невероятно тяжелой, и в игру её просто так не запихнешь нужна ретопология (об этом позже).
✂️ Булиан (Boolean): Берем куб, вычитаем из него сферу получаем выемку. Отлично подходит для быстрого драфта сложных хард-сюрфейс деталей (пушки, механизмы). Минус — оставляет после себя просто чудовищно грязную сетку, и снова привет ретопологии.
🧊 Полигональное моделирование (Subdiv / Box modeling): Классика. Берем точку, тянем грань, создаем полигон. Медленно, вдумчиво, как игра в шахматы. Именно тут рождается самая правильная, чистая и оптимизированная геометрия.
Я сейчас ковыряю именно полигональное моделирование. А завтра расскажу, почему в этом методе есть свои строгие законы, нарушив которые, можно получить бомбу замедленного действия. 💣
🔥2
🎨 Почему полигонам не все равно?
Одно дело просто придать объекту форму, и совсем другое сделать это правильно.
В полигональном моделировании всё состоит из фейсов, но они далеко не равны:
🔺 Тригоны (Треугольники): Движки в итоге всё равно бьют всё на треугольники, но в редакторе их дико неудобно двигать, а при сглаживании они выдают артефакты.
🔲 Квады (4 стороны): Золотой стандарт. Они создают чистые «петли» (edge loops), предсказуемо деформируются и отлично дружат с математикой.
🛑 Энгоны (5+ сторон): Враг номер один. Ломают тени и заставляют компьютер гадать, как их отрисовать (а гадает он плохо).
Настоящая проверка сетки на вшивость это Subdivision (Сабдив). Этот модификатор делит каждый полигон на несколько мелких, чтобы поверхность стала идеально гладкой.
Главное правило при сабдиве форма не должна плыть. Если топология грязная (энгоны в неположенных местах), то при сглаживании ваш красивый щит превратится в пожеванную фольгу. Хорошая сетка повторяет естественные изгибы объекта.
Завтра разберем, зачем мы так мучаемся с этими квадратами и как это напрямую спасает видеокарту игрока.
Есть идеи? Пишите в комменты! ⬇️
Одно дело просто придать объекту форму, и совсем другое сделать это правильно.
В полигональном моделировании всё состоит из фейсов, но они далеко не равны:
🔺 Тригоны (Треугольники): Движки в итоге всё равно бьют всё на треугольники, но в редакторе их дико неудобно двигать, а при сглаживании они выдают артефакты.
🔲 Квады (4 стороны): Золотой стандарт. Они создают чистые «петли» (edge loops), предсказуемо деформируются и отлично дружат с математикой.
🛑 Энгоны (5+ сторон): Враг номер один. Ломают тени и заставляют компьютер гадать, как их отрисовать (а гадает он плохо).
Настоящая проверка сетки на вшивость это Subdivision (Сабдив). Этот модификатор делит каждый полигон на несколько мелких, чтобы поверхность стала идеально гладкой.
Главное правило при сабдиве форма не должна плыть. Если топология грязная (энгоны в неположенных местах), то при сглаживании ваш красивый щит превратится в пожеванную фольгу. Хорошая сетка повторяет естественные изгибы объекта.
Завтра разберем, зачем мы так мучаемся с этими квадратами и как это напрямую спасает видеокарту игрока.
Есть идеи? Пишите в комменты! ⬇️
❤3🤨1
🎮 Как правильная сетка бережет вашу видеокарту?
Вчера мы обсуждали квады и чистую топологию. Сегодня о том, зачем это нужно игровому движку. Компьютер ленив и не хочет рендерить миллионы полигонов там, где можно схалявить.
Вот три столпа оптимизации:
1️⃣ LOD-ы (Level of Detail): Классика. Зачем рисовать пуговицу на куртке врага, если он в 100 метрах? Делается несколько версий: LOD 0 (максимум деталей для крупных планов) и LOD 3 (мыло из пары треугольников для дали). Движок меняет их на лету.
2️⃣ Тесселяция (Tessellation): Чтобы кирпичная стена казалась объемной, не нужно моделить каждый кирпич. Движку дают плоскую стену и «карту высот». Он сам в реальном времени дробит сетку и выпячивает кирпичи наружу. Появляется рельеф и честные тени. Тесселяцию мы еще затронем когда будем делать снег.
3️⃣ Nanite (Unreal Engine 5): Убийца ручной оптимизации. Он сам анализирует пиксели на экране и решает, где показать микроскопические детали, а где упростить гору. Можно вставлять киношные модели, и видюха не сгорит.
При чем тут топология? Даже самым крутым технологиям вроде тесселяции или Nanite в разы легче работать с правильной сеткой. Дыры или кривые пересечения выдадут страшные визуальные артефакты вместо красивого рельефа. Чистая сетка залог здоровой игры!
Вчера мы обсуждали квады и чистую топологию. Сегодня о том, зачем это нужно игровому движку. Компьютер ленив и не хочет рендерить миллионы полигонов там, где можно схалявить.
Вот три столпа оптимизации:
1️⃣ LOD-ы (Level of Detail): Классика. Зачем рисовать пуговицу на куртке врага, если он в 100 метрах? Делается несколько версий: LOD 0 (максимум деталей для крупных планов) и LOD 3 (мыло из пары треугольников для дали). Движок меняет их на лету.
2️⃣ Тесселяция (Tessellation): Чтобы кирпичная стена казалась объемной, не нужно моделить каждый кирпич. Движку дают плоскую стену и «карту высот». Он сам в реальном времени дробит сетку и выпячивает кирпичи наружу. Появляется рельеф и честные тени. Тесселяцию мы еще затронем когда будем делать снег.
3️⃣ Nanite (Unreal Engine 5): Убийца ручной оптимизации. Он сам анализирует пиксели на экране и решает, где показать микроскопические детали, а где упростить гору. Можно вставлять киношные модели, и видюха не сгорит.
При чем тут топология? Даже самым крутым технологиям вроде тесселяции или Nanite в разы легче работать с правильной сеткой. Дыры или кривые пересечения выдадут страшные визуальные артефакты вместо красивого рельефа. Чистая сетка залог здоровой игры!
❤2🤓1
🏁 Итоги недели 3D. Зачем инди-команде знать всё это?
Эта неделя погружения в геометрию подошла к концу. Почему вообще важно разбираться в пайплайнах соседних специалистов, даже если твоя основная задача писать код и собирать архитектуру?
В небольшой инди-команде границы между ролями часто размываются. Когда программист понимает, почему у 3D-модели поехали нормали, а 3D-шник понимает, как скрипт обращается к его префабу, скорость разработки возрастает кратно. Меньше времени тратится на перекидывание ассетов туда-сюда со словами "оно сломалось в движке, переделывай".
Понимание базовых правил 3D позволяет выстроить грамотный конвейер добавления контента в игру будь то новые карточки, элементы интерфейса или окружение.
Как вам такой формат? Хотите, чтобы я иногда разбавлял наши девлоги и отчеты о механиках вот такими техническими экскурсиями в смежные области? Или лучше вернуться к суровому коду и геймдизайну?
Голосуйте реакциями и пишите в комменты! 👇
Эта неделя погружения в геометрию подошла к концу. Почему вообще важно разбираться в пайплайнах соседних специалистов, даже если твоя основная задача писать код и собирать архитектуру?
В небольшой инди-команде границы между ролями часто размываются. Когда программист понимает, почему у 3D-модели поехали нормали, а 3D-шник понимает, как скрипт обращается к его префабу, скорость разработки возрастает кратно. Меньше времени тратится на перекидывание ассетов туда-сюда со словами "оно сломалось в движке, переделывай".
Понимание базовых правил 3D позволяет выстроить грамотный конвейер добавления контента в игру будь то новые карточки, элементы интерфейса или окружение.
Как вам такой формат? Хотите, чтобы я иногда разбавлял наши девлоги и отчеты о механиках вот такими техническими экскурсиями в смежные области? Или лучше вернуться к суровому коду и геймдизайну?
Голосуйте реакциями и пишите в комменты! 👇
❤5👍1🔥1👻1