Шеф 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