GameDev: разработка игр
前往频道在 Telegram
Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов Разместить рекламу: @tproger_sales_bot Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
显示更多7 627
订阅者
-324 小时
+117 天
-2030 天
数据加载中...
吸引订阅者
九月 '26
九月 '26
+45
在2个频道中
八月 '26
+71
在1个频道中
Get PRO
七月 '26
+80
在6个频道中
Get PRO
六月 '26
+83
在1个频道中
Get PRO
五月 '26
+85
在1个频道中
Get PRO
四月 '26
+61
在0个频道中
Get PRO
三月 '26
+118
在6个频道中
Get PRO
二月 '26
+92
在1个频道中
Get PRO
一月 '26
+90
在6个频道中
Get PRO
十二月 '25
+86
在7个频道中
Get PRO
十一月 '25
+133
在4个频道中
Get PRO
十月 '25
+97
在0个频道中
Get PRO
九月 '25
+91
在2个频道中
Get PRO
八月 '25
+115
在1个频道中
Get PRO
七月 '25
+82
在0个频道中
Get PRO
六月 '25
+78
在2个频道中
Get PRO
五月 '25
+90
在1个频道中
Get PRO
四月 '25
+146
在2个频道中
Get PRO
三月 '25
+139
在2个频道中
Get PRO
二月 '25
+90
在1个频道中
Get PRO
一月 '25
+72
在0个频道中
Get PRO
十二月 '24
+67
在1个频道中
Get PRO
十一月 '24
+71
在2个频道中
Get PRO
十月 '24
+74
在1个频道中
Get PRO
九月 '24
+67
在1个频道中
Get PRO
八月 '24
+72
在2个频道中
Get PRO
七月 '24
+71
在1个频道中
Get PRO
六月 '24
+63
在2个频道中
Get PRO
五月 '24
+60
在1个频道中
Get PRO
四月 '24
+60
在0个频道中
Get PRO
三月 '24
+68
在0个频道中
Get PRO
二月 '24
+49
在0个频道中
Get PRO
一月 '24
+69
在0个频道中
Get PRO
十二月 '23
+80
在2个频道中
Get PRO
十一月 '23
+54
在0个频道中
Get PRO
十月 '23
+72
在2个频道中
Get PRO
九月 '23
+64
在0个频道中
Get PRO
八月 '23
+80
在0个频道中
Get PRO
七月 '23
+63
在0个频道中
Get PRO
六月 '23
+64
在0个频道中
Get PRO
五月 '23
+62
在0个频道中
Get PRO
四月 '23
+74
在0个频道中
Get PRO
三月 '23
+97
在0个频道中
Get PRO
二月 '23
+103
在0个频道中
Get PRO
一月 '23
+170
在0个频道中
Get PRO
十二月 '22
+192
在0个频道中
Get PRO
十一月 '22
+212
在0个频道中
Get PRO
十月 '22
+158
在0个频道中
Get PRO
九月 '22
+181
在0个频道中
Get PRO
八月 '22
+235
在0个频道中
Get PRO
七月 '22
+297
在0个频道中
Get PRO
六月 '22
+206
在0个频道中
Get PRO
五月 '22
+272
在0个频道中
Get PRO
四月 '22
+200
在0个频道中
Get PRO
三月 '22
+194
在0个频道中
Get PRO
二月 '22
+299
在0个频道中
Get PRO
一月 '22
+138
在0个频道中
Get PRO
十二月 '21
+86
在0个频道中
Get PRO
十一月 '21
+92
在0个频道中
Get PRO
十月 '21
+129
在0个频道中
Get PRO
九月 '21
+136
在0个频道中
Get PRO
八月 '21
+476
在0个频道中
Get PRO
七月 '21
+674
在0个频道中
Get PRO
六月 '21
+491
在0个频道中
Get PRO
五月 '21
+4 020
在0个频道中
Get PRO
四月 '21
+4 007
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 16 九月 | +1 | |||
| 15 九月 | +3 | |||
| 14 九月 | +2 | |||
| 13 九月 | +3 | |||
| 12 九月 | +3 | |||
| 11 九月 | +6 | |||
| 10 九月 | +3 | |||
| 09 九月 | +7 | |||
| 08 九月 | +1 | |||
| 07 九月 | +3 | |||
| 06 九月 | +3 | |||
| 05 九月 | +2 | |||
| 04 九月 | +1 | |||
| 03 九月 | +6 | |||
| 02 九月 | +1 | |||
| 01 九月 | 0 |
频道帖子
Как работает Command в игровой архитектуре
Кнопка может напрямую вызывать
jump() или fireGun(). Command превращает вызов в объект с методом execute(). Обработчик ввода хранит команду для каждой кнопки, поэтому назначение можно заменить без переписывания его логики.
Если передавать в execute() персонажа, одна команда прыжка сможет управлять любым героем. Команды создаёт и ввод игрока, и ИИ, а другой код применяет их к персонажу. Очередь между ними отделяет источник решения от исполнителя. Если команды сохраняются в передаваемом формате, их можно отправить по сети и воспроизвести на другой машине.
Глава о Command в Game Programming Patterns разбирает подход на примерах C++. Получается один механизм для переназначения кнопок, управления героями через ИИ, сетевого воспроизведения и отмены действий.| 2 | Как в Godot 4.3 автоматизировали синхронизацию GPU
В Vulkan GPU может завершать команды не в порядке отправки. Разработчик расставляет барьеры: задаёт, какая работа должна закончиться до следующей. Старый RenderingDevice без точной маски задерживал всю последующую работу и создавал лишние барьеры.
Технический разбор Godot Engine описывает новую схему: движок автоматически строит граф зависимостей без циклов между пакетами отрисовки и вычислений. Код уже находился в основной ветке и предназначался для Godot 4.3. Проекты менять не требовалось, а методы RenderingDevice стали запрашивать меньше данных.
Для систем частиц на GPU ожидалось особенно заметное ускорение, для сцен с постобработкой: сокращение времени кадра примерно на 5–15%. Статья вышла в феврале 2024 года, детали API стоит сверять с документацией. | 629 |
| 3 | Как собрать систему сохранений мира на C++ в Unreal Engine
Для каждого нужного актора система хранит имя, Transform с координатами, поворотом и масштабом, а также массив байтов. Unreal Engine записывает в него только поля с UPROPERTY(SaveGame), а интерфейс отсекает ненужные статичные акторы.
При загрузке система находит актор по имени, возвращает его положение и значения полей, затем вызывает OnActorLoaded для восстановления анимации и другого поведения. Для объектов, созданных во время выполнения, автор предлагает стабильный FGuid: их имена могут меняться. Данные игроков хранятся отдельно и связываются с уникальным ID, чтобы вернуть прогресс после повторного входа на сервер.
Разбор с полным исходным кодом показывает эту архитектуру на костре-сейвпоинте в духе Dark Souls: сохраняются состояние сундука, положение предметов и накопленные кредиты. | 685 |
| 4 | Как создать эффект текущей жидкости в Unity с картой течения
Для эффекта воды, грязи или лавы физическая симуляция не нужна. В уроке для Unity 2017.4.4f1 текстуру смещают по UV, а карта течения задаёт направление и скорость для участков поверхности.
Карта хранит двумерный вектор в красном и зелёном каналах. Шейдер переводит значения 0…1 в −1…1 и вычитает из UV вектор, умноженный на время. Участки деформируются по-разному, поэтому материал не выглядит жёстко сдвигаемой плоскостью.
Чтобы растяжение не копилось, прогресс берут из дробной части времени и сбрасывают раз в секунду. Переход маскируют: перед сбросом цвет умножают на коэффициент, падающий до нуля, после него коэффициент растёт. В уроке Catlike Coding есть код шейдера, импорт карты без sRGB для хранения векторов и разбор артефактов DXT1. | 795 |
| 5 | Как рассчитать поле зрения и освещение на 2D-карте
В разборе Red Blob Games показан алгоритм для стен из отрезков. Лучи направляются к началу и концу каждой стены, а ближайшие пересечения задают треугольники.
Эффективная версия сортирует концы стен по углу и поворачивает луч на 360°, сохраняя стены на его пути. При смене ближайшей стены начинается новый треугольник. Их объединение даёт область, видимую из выбранной точки.
Результат пересекают с кругом, градиентом или конусом, чтобы ограничить обзор, добавить затухание света или фонарик. Расчёт применим к факелам, камерам и поиску укрытий игровым ИИ. Есть песочница и код на Haxe, но автор предупреждает о пропущенных оптимизациях и проблемах численной устойчивости: для проекта лучше изучить более надёжные реализации по ссылкам. | 785 |
| 6 | ⚡️ Запустите Web Shop, выполняйте задания и выигрывайте призы
Xsolla приглашает разработчиков мобильных игр на Web Shop Arena 2026 — конкурс с призовым фондом $100 000.
Это не просто соревнование: вместе с экспертами Xsolla вы шаг за шагом построите собственный канал прямых продаж — от запуска Web Shop и настройки платежей до продвижения и LiveOps.
Каждая студия получает возможность выиграть до $5 000 за выполнение челленджей. А 4 студии с лучшими Web Shop в финале смогут выиграть дополнительные призы — от денежной выплаты до рекламного бюджета на сумму до $18 000 с партнёром Emarka.
Заявки принимаются до 30 сентября.
➡️ Подать заявку | 795 |
| 7 | Как убрать задержку управления с помощью предсказания на клиенте
При авторитетном сервере команда проходит до сервера и обратно, прежде чем игрок увидит движение. Предсказание на клиенте убирает эту паузу: клиент сразу применяет ввод локально, а сервер по-прежнему определяет истинное состояние мира.
Сложность начинается, когда ответ приходит после нескольких команд. Клиент присваивает каждой порядковый номер, а сервер возвращает номер последней обработанной. Получив ответ, клиент принимает состояние сервера, удаляет подтверждённые команды и заново применяет ещё не обработанные. Так персонаж не прыгает назад из-за запоздалого снимка мира.
В разборе Габриэля Гамбетты есть схемы с задержкой 100 и 250 мс и важная граница: эффект атаки можно показать сразу, но здоровье противника лучше менять только после ответа сервера. | 794 |
| 8 | Как Wave Function Collapse генерирует сетку из тайлов
Wave Function Collapse (WFC) строит генератор на решении ограничений. Каждая клетка сетки хранит набор допустимых тайлов, а правила задают, какие края соседних тайлов могут соприкасаться.
На каждом шаге алгоритм выбирает клетку с наименьшим числом вариантов, случайно оставляет в ней один тайл и пересчитывает соседей. Если выбор исключает часть комбинаций рядом, ограничения распространяются дальше по сетке. Случайность даёт разные результаты, но каждый из них должен соблюдать заданные правила.
В материале Wave Function Collapse Explained механику сначала разбирают на мини-судоку, а затем переносят на сетку 3×3. Разбор пригодится, если хотите реализовать управляемую процедурную генерацию и понимать, почему тайл сокращает варианты вокруг. | 834 |
| 9 | Как A* ищет короткий путь по игровой карте
Для алгоритма карта выглядит как граф: узлы обозначают положения, рёбра задают допустимые переходы. Поиск в ширину обходит граф равномерно, алгоритм Дейкстры учитывает стоимость перемещения, а A* использует оценку расстояния до цели и направляет поиск преимущественно к ней.
В примере проход по воде стоит в десять раз дороже прохода по траве. Представление карты тоже влияет на производительность: A* быстрее работает с меньшим числом узлов, хотя сетку проще использовать.
Интерактивный разбор Red Blob Games содержит анимации и код на Python: от очереди и восстановления пути до приоритетов и эвристики. Откройте его, если настраиваете навигацию персонажей и хотите увидеть, как граф и стоимость переходов меняют поиск. | 853 |
| 10 | Как устроены автоматы состояний и паттерн State в игровой логике
У героини платформера появились прыжок, приседание и атака в падении. Каждое действие добавляло булевый флаг, а сочетания быстро стали источником ошибок: персонаж менял спрайт на стоящий прямо в воздухе или снова прыгал во время атаки.
Конечный автомат оставляет одно текущее состояние: героиня стоит, прыгает, приседает или атакует в падении. Кнопка запускает только разрешённый переход, остальные команды игнорируются. Даже перечисление со switch исключает невозможные сочетания и собирает обработку состояния в одном месте.
В главе Game Programming Patterns этот пример развивается от простого switch до паттерна State и более сложных автоматов. Подойдёт, если логика персонажа уже обрастает проверками. | 865 |
| 11 | Создаём match-3 на Unity с раздельной логикой и визуализацией
Туториал ведёт от пустой сцены к прототипу на Unity 2022.3.2f1: игрок меняет плитки местами и собирает линии минимум из трёх одинаковых элементов. Игровая логика отделена от представления, а Match3Skin связывает её с основным контроллером. Визуальную оболочку можно заменить, не переписывая правила.
Плитки получают разные формы ещё до цвета, чтобы их различали люди с нарушением цветовосприятия. Префабы возвращаются в универсальный пул, а двумерная сетка хранит ячейки в обычном массиве: Unity сериализует его и сохраняет данные после горячей перезагрузки кода.
В пошаговом разборе Catlike Coding есть код обработки перетаскивания, пула объектов и сериализуемой сетки. Получится крепкая основа для собственного прототипа match-3. | 893 |
| 12 | Как собрать орбитальную камеру в Unity без Cinemachine
В руководстве Catlike Coding автор собирает камеру от третьего лица вокруг сферы в Unity 2019.2.18f1. Позиция обновляется в LateUpdate после движения цели, а заданная дистанция сохраняется вдоль направления взгляда.
Если физика двигает сферу с фиксированным шагом, а кадры выводятся с другой частотой, камера дрожит. Интерполяция Rigidbody сглаживает движение. Радиус фокуса отсекает малые сдвиги, а экспоненциальное центрирование плавно возвращает цель в середину кадра независимо от частоты обновления.
Для ручной орбиты автор хранит вертикальный и горизонтальный углы, строит по ним поворот и берёт время без учёта замедления или паузы. Такую камеру можно понять и настроить под управление своего проекта. | 888 |
| 13 | С днем программиста, коллеги!
Желаем, чтобы код компилировался с первого раза, баги находились до релиза, а таски «на пять минут» действительно занимали пять минут.
И конечно, пусть в жизни будет больше приятных сюрпризов — один из них мы уже подготовили. Скорее переходите по ссылке, трясите коробку и забирайте свой подарок ко Дню программиста: https://tprg.ru/8c1C | 868 |
| 14 | Как устроена физика Celeste и TowerFall
В Celeste и TowerFall физика построена на двух классах. Solid описывает геометрию уровня, Actor отвечает за подвижные объекты. Коллайдеры прямоугольные, их координаты и размеры целочисленные.
Actor накапливает дробную часть перемещения, округляет остаток, затем идёт по одному пикселю и перед каждым шагом проверяет препятствие. При столкновении движение останавливается и вызывается переданный обработчик.
Движущаяся платформа сначала запоминает пассажиров, затем сдвигается и расталкивает пересёкшихся с ней актёров. Остальных пассажиров она переносит на полное расстояние. В разборе физики Celeste и TowerFall есть код схемы, обработка зажатых объектов и варианты столкновений для тайлового платформера. | 937 |
| 15 | Как читать ввод геймпада в JavaScript и находить дрейф стиков
Gamepad API прост, но первая проверка может объявить неисправный контроллер здоровым. Chromium держит значение оси на нуле, пока хотя бы раз не увидит её около центра: по модулю меньше 0,1. Поэтому сильный дрейф может оставаться скрытым сколько угодно.
Есть и вторая ловушка: navigator.getGamepads() возвращает снимок состояния. Его нужно вызывать заново в каждом кадре requestAnimationFrame, а пустые ячейки массива пропускать.
Я сохранил практический разбор freeCodeCamp как чеклист для браузерного тестера. После подключения попросите пользователя провести стики через центр, дождитесь ненулевого значения каждой оси и только затем ищите дрейф. Без контроллера опрашивайте API редко, после подключения переходите к каждому кадру. | 927 |
| 16 | Как Celeste незаметно прощает неточный ввод
Celeste остаётся сложной, но управление ощущается отзывчивым: разработчики расширяют окна времени и позиции в пользу игрока. После схода с края прыгнуть можно ещё несколько мгновений. Зажатая перед приземлением кнопка срабатывает точно в кадр касания. У вершины прыжка гравитация вдвое слабее, пока кнопка нажата, поэтому есть время поправить траекторию.
При ударе головой об угол Мэдлин сдвигают в сторону, а боковой рывок у края поднимает её на платформу. Импульс движущейся платформы хранится несколько кадров после остановки.
Принцип для разработчика: немного расширить допуски и незаметно помочь игроку выполнить задуманное действие. В авторском разборе Celeste & Forgiveness собраны десять приёмов, включая прыжки от стены и возврат выносливости при поздней смене направления. | 928 |
| 17 | Настройте синусоиду тремя параметрами
Если движение объекта уже задано синусоидой, размах меняет коэффициент A. При A=2 значение становится вдвое больше в обоих направлениях.
За скорость повторения отвечает w в sin(wx). Базовый период равен 2π; при w=2 он сокращается до π, поэтому цикл проходит вдвое быстрее. Для нужного периода p используйте w=2π/p.
Фаза θ задаёт точку начала цикла, не меняя размах или частоту. В примере sin(x+π/2) синусоида сразу оказывается на положительном пике и сдвигается влево на π/2; отрицательная θ сдвигает её вправо.
В разборе Eli Bendersky параметры можно покрутить в интерактивной демонстрации. Если синусоида уже задаёт колебание объекта, камеры или числового параметра шейдера, меняйте A, w и θ по отдельности: так видно, что отвечает за размах, темп и стартовую точку. | 950 |
| 18 | Прокрутка может переключать 3D-сцены без разрыва рендера
Shader Development Studio собрала почти весь сайт внутри HTML-холста. Three.js рендерит 3D-сцены, React Three Fiber описывает их компонентами, а язык материалов TSL компилируется и для WebGPU, и для WebGL. Так студия сохраняет совместимость со старым графическим API, не отказываясь от нового.
Интерфейс тоже рисуется внутри Three.js через изменённый @pmndrs/uikit, поэтому проходит через ту же постобработку, что и сцены. Плавную прокрутку ведёт доработанная библиотека Lenis: она фиксирует переходы между главным экраном и разделом работ.
Для геймдева здесь узнаваемая архитектура: меню, 3D и эффекты собраны в одном графическом конвейере. В разборе Codrops осталось устройство выборочного рендеринга и переходов между сценами. | 958 |
| 19 | Первый кадр на WebGPU пришлось ждать почти 20 секунд
В веб-проекте Cerebrium одна область рендеринга содержала несколько окружений со своими материалами, частицами, светом и постобработкой. Перед стартом Three.js обходил графы узлов на TSL, языке описания шейдеров Three.js, собирал из них шейдеры и компилировал графические конвейеры. На эталонной машине эта подготовка занимала почти 20 секунд, хотя после запуска производительность рендеринга проблемой не была.
Проверяйте два этапа отдельно: скорость уже запущенного рендера и время до первого кадра. В насыщенной сцене стоит отдельно профилировать сборку шейдеров и создание конвейеров до показа изображения.
В разборе Codrops есть весь путь выбора между WebGPU и WebGL, устройство нескольких окружений в одном холсте и объяснение, почему более чистой архитектуры оказалось недостаточно. | 1 009 |
| 20 | Сотни стеклянных карточек уложились в один рендер-проход
В браузерном эксперименте на Three.js каждая карточка — плоская сетка. Скругления, фаска и преломление рассчитываются в материале, который смещает выборку из видеотекстуры: изображение будто проходит через стекло. Сцена на WebGPU обходится без освещения, постобработки и промежуточных буферов.
Бесконечность тоже имитируется. Карточка, ушедшая за край, переносится на противоположный, а сетку размещают на большой сфере. Наклон и уменьшение элементов по краям создают глубину без бесконечной геометрии.
В разборе Codrops есть код на TSL, языке шейдеров Three.js, расчёт нормалей из карты высот и настройка числа выборок под мощные и мобильные графические процессоры. Приём можно примерить к меню выбора уровней и галереям с десятками анимированных элементов. | 1 026 |
