Шеф Code | Gamedev 👨‍🍳
207 subscribers
207 photos
7 videos
22 links
Download Telegram
Channel name was changed to «Шеф Code 👨‍🍳»
DotNet привет, дорогие друзья.
Стартует 2026 — с чем нас всех и поздравляю.

Этот год посвящаю геймдеву, а именно разработке на Unity. Планы грандиозные: собираю команду и запускаем разработку roguelite-игры.

Здесь — заметки, апдейты, мысли и лог изученного. Фиксирую путь с нуля до результата.

Геймдев для меня — новая территория, а значит путь будет особенно интересным.

Учёба, ошибки, результат — всё здесь.

Погнали!
🔥5
Сегодня был достаточно специфичный день - была долгая прогулка.

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

Слушая все эти рассказы мотивация сделать что то самому только растет, особенно после истории Stardew Valley.

Пожалуй пора отдохнуть...
🔥4
Разбирал тут подходы к левел-дизайну в платформерах. Выбор метода подгрузки — это всегда выбор между удобством работы и тем, что увидит игрок.

1. Отдельные сцены для каждой комнаты или сегмента. Когда игрок проходит дверь, предыдущая сцена выгружается, новая загружается. Переход заметен, зато удобно работать с большим контентом и изолировать логику. Примеры: Rayman (первые части), Cuphead, Hollow Knight.

2. Комнаты внутри одной сцены (аддитивная подгрузка). Игрок находится в одной сцене, соседние комнаты подгружаются заранее, дальние выгружаются. Переход почти незаметен, экономится память, проще контролировать камеру и логику. Так делают Celeste и Dead Cells.

Выбор подхода зависит от масштаба уровня и свободы игрока: короткие линейные сегменты проще делать сценами, большие разветвлённые миры — аддитивной подгрузкой.
🔥1
10 лет я в разработке: десктоп, бэкенд, апдейтеры. В основном коммерческий бэк, знакомые архитектуры и бесконечное «двиганье джейсонов». Казалось бы, все схемы давно отработаны, но в геймдеве реальность оказалась другой.

База на месте — GoF паттерны используются вовсю. Но помимо классического ООП тут есть ECS (Entity Component System). Это реально другой мир и переход к Data-Oriented Design.

Для человека из энтерпрайза это переворачивает всё с ног на голову:

🔹 Никакого глубокого наследования. Сущность — это просто ID, «коробка» для компонентов (данных).

🔹 Данные отдельно, логика отдельно. Вместо инкапсуляции — системы, которые просчитывают однотипные компоненты пачками.

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

Разработка — штука широкая.
Даже с моим багажом ощущение, что я всё ещё на верхушке айсберга, и погружаться в это всё интереснее.

Готовы послушать подробнее про ECS? Накидайте реакций, чтобы понимать интерес.
🔥4
А пока тема с ECS греется расскажу вам про рандом.

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

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

Разрабам это дико упрощает жизнь в нескольких вещах:

🔹 Реплеи: Игра не записывает видео, она просто сохраняет сид и порядок нажатых игроком кнопок. При воспроизведении движок заново просчитывает всё по той же схеме, и мир получается идентичным.

🔹 Процедурная генерация: В условном Майнкрафте не нужно хранить триллионы блоков на диске. Достаточно знать сид, и мир соберется сам прямо на ходу.

🔹 Синхрон в онлайне: В стратегиях или файтингах достаточно передать сид обоим игрокам, чтобы у них на экранах всё происходило одинаково без передачи лишних данных.

В общем, рандом в играх — это просто заранее прописанная очередь из чисел, которая выглядит случайной только потому, что мы не знаем, какой сид был на входе.
🔥2
Привет!

Привет друзья! Нас уже больше 20, я в шоке! Мы уже превращаемся в комьюнити! ⚡️

Спасибо за поддержку, постараюсь вас не разочаровать и с каждым разом повышать планку контента!

Кстати о нем: любой инди-разработчик знает, что первые 20 человек — это самые важные люди. Это те, кто видит проект еще «скелетом», без красивой обертки.

Первый проект по плану: творческая интерпретация механики выбора "одного из нескольких" (как рулетка). Мы в команде решили провести микроджем кто сделает интереснее, скоро будут первые результаты.

Сейчас я как раз занимаюсь анимированием, чтобы этот скелет начал потихоньку оживать.

Делать всё планирую через DOTween. Чуть позже напишу отдельный пост, почему выбрал именно его и как он упрощает жизнь.

Ну и раз нас стало больше, давайте знакомиться! Кто из вас сам что-то пилит, а кто просто зашел посмотреть на внутреннюю кухню?
🔥43
This media is not supported in your browser
VIEW IN TELEGRAM
Хотел я вам рассказать про DOTween как и обещал, но понял, что надо сначала копнуть глубже. Поэтому разделим тему на 2 части.

И так, фундамент. Как работает время в играх:

Прежде чем учиться двигать объекты, нужно понять, как «думает» Unity. Все, что вы видите на экране — это быстрая смена статичных картинок (кадров). Существует бесконечный геймлуп — цикл, который каждый кадр вызывает код в Update. Если у вас 60 FPS, то код прогоняется 60 раз в секунду.

Проблема: Если в коде написать «перемести объект на 5 метров», он окажется там в следующем же кадре. Мгновенно. Для игрока это будет выглядеть как телепортация, а не движение.

Как сделать плавно? Нам нужно разбить эти 5 метров на маленькие отрезки и проходить их каждый кадр. Инструмент для этого — Корутины (Coroutines).

Это особый вид функций, которые могут встать на паузу в определенном месте (yield return), отдать управление движку, а на следующем кадре (или через секунду) продолжить работу ровно с той же точки.

Чтобы объект затрясся, нам нужно в течение нескольких кадров быстро смещать его в случайные стороны. В корутине это выглядит так:

🔹 Создаем цикл например на 10 повторений.

🔹 Берем рандомное направление (в Unity это часто Random.insideUnitCircle) и прибавляем его к позиции объекта.

🔹 Ставим паузу до следующего кадра через yield return null. Это ключевой момент — без него объект переместится 10 раз за один миг, и вы ничего не заметите. Пауза заставляет Unity «показать» каждое смещение игроку покадрово.

🔹 Возвращаем назад: После цикла желательно вернуть объект в исходную точку, иначе после тряски он останется смещенным.

Корутины — это база, которую нужно знать. Но писать их вручную для каждой анимации долго. Легко запутаться в логике, сложно отменять анимации на полпути и почти невозможно красиво настроить «отскоки» или плавное замедление без сложной математики.

Чтобы не изобретать велосипед каждый раз, разработчики используют мощные библиотеки. Лидер среди них — DOTween, и о нем с примерами мы поговорим в следующем посте.
🔥3👍1
Сегодня не до разработки. Сегодня апгрейд базы.

Полдня собирал новое компьютерное кресло.
Инструкция, болты «на глаз», пару раз разобрал и собрал заново.
Зато теперь хотя бы понятно, на чём я собираюсь сидеть ближайшие месяцы.

Креслу, кстати, больше всех обрадовался кот.
Занял его сразу, как будто так и было задумано.

И заодно приехали книги:

🔹 «Игровой баланс» — Ян Шрайбер, Бренда Ромеро
🔹 «Геймдизайн» — Тайман Сильвестр

Обе не про «как сделать хит», а про мышление.
Почему одни механики цепляют, а другие нет.
Почему баланс это не только цифры.
И почему игрок почти никогда не играет так, как ты задумал.

Читаю сейчас именно это, потому что код не главная проблема.
Сложнее понять, что именно ты хочешь дать игроку.

Практика будет.
Просто хочется, чтобы под ней был нормальный фундамент.
🔥9👏1