TGViewer
Channel Public Channel
GameDev: разработка игр

GameDev: разработка игр

@make_game

Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов

Разместить рекламу: @tproger_sales_bot

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Subscribers
7.63K
Photos
905
Videos
203
Links
1.3K
Recent Posts 20 shown
Post #2078 411
Как собрать редактируемую 2D-карту в Unity с Marching Squares

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

Для редактирования Unity выпускает луч от камеры через позицию курсора. Точка попадания переводится в координаты карты, после чего код находит нужный чанк и меняет состояние ячейки. Размер кисти задаёт трафарет, поэтому за один проход можно заполнить несколько ячеек.

Marching Squares превращает сочетания пустых и заполненных ячеек в треугольники. Так из булевой сетки получается меш для редактора 2D-уровней. В туториале Catlike Coding весь путь собран на C# для Unity 4.5.2, поэтому перед переносом в актуальный проект стоит сверить API.
Post #2077 523
Как пространственное разбиение ускоряет поиск соседей в игровом мире

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

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

Оптимизация оправдана при множестве объектов и частых запросах по координатам. При малом числе объектов расходы могут не окупиться. Код на C++ и разбор компромиссов собраны в главе Game Programming Patterns.
Post #2076 589
Как построить кубическую сферу в Unity без скопления вершин у полюсов

У обычной UV-сферы вершины сгущаются у полюсов. В учебнике для Unity 2020.3.23f1 автор предлагает начать с куба: разбить шесть граней на сетки из отдельных квадратов, задать каждой положение, направления координат U и V, нормаль и касательную, а затем притянуть вершины к центру до сферической формы.

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

В пошаговом разборе Cube Sphere есть код генератора, настройка шести граней и объяснение раскладки сетки.
  • ❤ 4
Post #2075 674
Зачем игровому движку очередь событий

Прямой вызов playSound() блокирует меню, пока аудиодвижок загружает ресурс. Два врага, задетые одной атакой, запускают звук дважды и удваивают громкость. Запросы из потоков приходят вместе, хотя для аудио выделен свой поток.

С очередью система оставляет запрос и продолжает работу. Аудиодвижок забирает его позже, сводит звуки, расставляет приоритеты и выполняет работу в своём потоке. Кадр не ждёт загрузки, а аудиосистема выбирает момент обработки.

Очередь нужна для разделения отправки и обработки во времени. Если требуется лишь скрыть получателя, Observer или Command проще. Центральная очередь остаётся глобальной, а отправитель не получает немедленного ответа. В главе Game Programming Patterns паттерн разбирают на аудиосистеме и показывают его архитектурную цену.
  • ❤ 1
Post #2074 688
Как разделить код теней в собственном конвейере рендеринга Unity

Custom SRP 7.1.0 для Unity 6000.5.8f1 посвящён рефакторингу без изменения рендеринга. Тени точечных источников и прожекторов переносят из общего Shadows в отдельный OtherShadows. Редкий урок по графике, где прежняя картинка означает успех.

OtherShadows получает настройки и данные источников света. Структура Handles хранит TextureHandle и BufferHandle для атласа теней и буфера данных; метод Use сообщает графу рендеринга, что проход читает оба ресурса. Shadows остаётся координатором. В новый класс также переносят резервирование теней, построение списков отрисовки и рендеринг.

В туториале Catlike Coding показана последовательность правок с кодом. Такое разделение готовит конвейер к будущим улучшениям и не смешивает независимые типы теней в одном классе.
  • ❤ 1
Post #2073 717
Как численное интегрирование двигает объекты в игровой физике

Физический цикл не вычисляет траекторию сразу. Он делит силу на массу, получает ускорение и малыми шагами обновляет координату и скорость объекта.

Цена метода видна на цифрах. Явный метод Эйлера сначала меняет координату по старой скорости, затем скорость по ускорению. При постоянном ускорении и шаге в одну секунду пример даёт 450 метров вместо точных 500 через 10 секунд. При шаге 1/100 секунды получается 499,497 метра.

Для пружины с меняющимся ускорением явная схема набирает энергию вместо затухания. Полунеявный метод Эйлера переставляет две строки: сначала обновляет скорость, потом координату, и расчёт пружины становится устойчивым. Разбор Гленна Фидлера на Gaffer On Games содержит код схем, сравнение с точным решением и обзор других интеграторов.
  • 👍 2
  • ❤ 1
Post #2072 753
Как управлять асинхронной загрузкой ассетов в Unreal Engine

Asset Manager позволяет назначить конфигурации монстров и оружия первичными ассетами. По идентификатору он загружает или выгружает связанные модели, текстуры и классы, поэтому весь контент не нужно держать в памяти.

Для асинхронной загрузки в C++ создаётся функция обратного вызова. После запроса она получает идентификатор и параметры, например точку появления монстра. Группы Asset Bundles разделяют мягкие ссылки: для меню можно запросить иконку без модели и способностей.

Предзагрузка держит ассет в памяти, пока хранится её дескриптор. Если отпустить дескриптор и не вызвать обычную загрузку, Asset Manager выгрузит ассет автоматически. В статье «Asset Manager for Data Assets & Async Loading» есть примеры для C++ и Blueprint.
  • ❤ 1
Post #2071 777
Как безопасно сериализовать пакеты игрового протокола на C++

Пропущенная проверка при чтении сетевого пакета может помочь атакующему уронить сервер. Гленн Фидлер заменяет ручные проверки одним методом Serialize. ReadStream и WriteStream дают одинаковый интерфейс, а шаблоны C++ собирают из него функции чтения и записи.

Каждый вызов проверяет диапазон значения и границу буфера; ошибка возвращает false и прекращает разбор без исключений. Для покоящегося физического тела можно отправить один бит вместо линейной и угловой скорости. Число от 0 до 10 с шагом 0,01 превращается в целое от 0 до 1000: меньше битов в пакете при заданной точности.

В разборе Gaffer On Games есть реализация потоков, чисел, векторов и кватернионов. Для собственного сетевого протокола это способ не дублировать код и проверки.
  • ❤ 3
Post #2070 857
Как синхронизировать физику сотен объектов и экономить трафик

При синхронизации состояния симуляция идёт на обеих сторонах, а по сети передают команды игрока и состояние лишь части объектов. Между пакетами объекты движутся по последним координатам и скоростям. В примере с 901 кубом пакет содержит до 64 обновлений.

Накопитель приоритета чаще выбирает активные объекты, но счёт остальных растёт каждый кадр. Не поместившееся обновление сохраняет приоритет до следующей отправки.

На приёмнике буфер задерживает пакеты на 4–5 кадров при 60 Гц и выдаёт их равномерно. При сжатии всё состояние округляют до сетевой точности на обеих сторонах перед каждым шагом симуляции: иначе расхождение координат вызывает рывки.

В статье Gaffer On Games разобраны структура пакета, приоритеты и расчёт под лимит 256 кбит/с.
  • ❤ 2
Post #2069 827
Как выбрать координаты для гексагональной сетки

В сетке у гекса шесть соседей, но при хранении по строкам и столбцам смещение зависит от чётности ряда или колонки. Руководство Red Blob Games предлагает представить сетку с тремя осями и ограничением q + r + s = 0.

Трёхмерная модель двумерной карты выглядит странно, но упрощает алгоритмы. В кубических координатах можно складывать и вычитать векторы, искать соседей, считать расстояние, поворачивать и отражать точки. Карту можно хранить в осевых координатах q, r, вычисляя третью по формуле s = -q-r.

Для прямоугольной карты подходят смещённые координаты или удвоенный шаг по одной оси; для остальных форм рекомендуются осевые либо кубические. Там же разобраны области в радиусе, поле зрения, поиск пути и перевод гексов в экранные пиксели.
Post #2068 839
Как добавить лазание по стенам в Unity

В восьмой части серии сфера получает физическое лазание. В Unity 2019.2.21f1 контакт проверяют по углу нормали: предел задают от 90° до 170°, по умолчанию 140°. Маска слоёв исключает запретные стены. Для контакта сохраняют компонент Rigidbody поверхности, поэтому сфера карабкается по движущимся объектам.

На стене лазание получает приоритет над ходьбой, гравитация отключается, а управление строится относительно контакта. Горизонталь вычисляют через векторное произведение нормали и направления вверх, затем обе оси проецируют на плоскость стены. Максимальную скорость снижают до 2, ускорение задают 20 для точности.

Урок Catlike Coding показывает код распознавания столкновений и движения вдоль стены. На запрещённой для лазания поверхности сфера падает.
Post #2067 840
Как построить поле направлений для волны врагов в tower defense

Если у десятков противников одна цель, не обязательно запускать A* отдельно для каждого. Поиск в ширину можно один раз начать от цели и распространить по всей сетке. Для каждой посещённой клетки алгоритм запоминает соседнюю клетку, из которой пришёл. Если идти по этим указателям обратно, получится кратчайший маршрут к цели.

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

В разборе Red Blob Games есть интерактивные визуализации фронта поиска, поля расстояний и стрелок, а также заметки по реализации на Python и C++.
Post #2066 967
Как работает Command в игровой архитектуре

Кнопка может напрямую вызывать jump() или fireGun(). Command превращает вызов в объект с методом execute(). Обработчик ввода хранит команду для каждой кнопки, поэтому назначение можно заменить без переписывания его логики.

Если передавать в execute() персонажа, одна команда прыжка сможет управлять любым героем. Команды создаёт и ввод игрока, и ИИ, а другой код применяет их к персонажу. Очередь между ними отделяет источник решения от исполнителя. Если команды сохраняются в передаваемом формате, их можно отправить по сети и воспроизвести на другой машине.

Глава о Command в Game Programming Patterns разбирает подход на примерах C++. Получается один механизм для переназначения кнопок, управления героями через ИИ, сетевого воспроизведения и отмены действий.
Post #2065 998
Как в Godot 4.3 автоматизировали синхронизацию GPU

В Vulkan GPU может завершать команды не в порядке отправки. Разработчик расставляет барьеры: задаёт, какая работа должна закончиться до следующей. Старый RenderingDevice без точной маски задерживал всю последующую работу и создавал лишние барьеры.

Технический разбор Godot Engine описывает новую схему: движок автоматически строит граф зависимостей без циклов между пакетами отрисовки и вычислений. Код уже находился в основной ветке и предназначался для Godot 4.3. Проекты менять не требовалось, а методы RenderingDevice стали запрашивать меньше данных.

Для систем частиц на GPU ожидалось особенно заметное ускорение, для сцен с постобработкой: сокращение времени кадра примерно на 5–15%. Статья вышла в феврале 2024 года, детали API стоит сверять с документацией.
  • ❤ 1
  • 👍 1
Post #2064 1.02K
Как собрать систему сохранений мира на C++ в Unreal Engine

Для каждого нужного актора система хранит имя, Transform с координатами, поворотом и масштабом, а также массив байтов. Unreal Engine записывает в него только поля с UPROPERTY(SaveGame), а интерфейс отсекает ненужные статичные акторы.

При загрузке система находит актор по имени, возвращает его положение и значения полей, затем вызывает OnActorLoaded для восстановления анимации и другого поведения. Для объектов, созданных во время выполнения, автор предлагает стабильный FGuid: их имена могут меняться. Данные игроков хранятся отдельно и связываются с уникальным ID, чтобы вернуть прогресс после повторного входа на сервер.

Разбор с полным исходным кодом показывает эту архитектуру на костре-сейвпоинте в духе Dark Souls: сохраняются состояние сундука, положение предметов и накопленные кредиты.
  • ❤ 4
Post #2063 1.01K
Как создать эффект текущей жидкости в Unity с картой течения

Для эффекта воды, грязи или лавы физическая симуляция не нужна. В уроке для Unity 2017.4.4f1 текстуру смещают по UV, а карта течения задаёт направление и скорость для участков поверхности.

Карта хранит двумерный вектор в красном и зелёном каналах. Шейдер переводит значения 0…1 в −1…1 и вычитает из UV вектор, умноженный на время. Участки деформируются по-разному, поэтому материал не выглядит жёстко сдвигаемой плоскостью.

Чтобы растяжение не копилось, прогресс берут из дробной части времени и сбрасывают раз в секунду. Переход маскируют: перед сбросом цвет умножают на коэффициент, падающий до нуля, после него коэффициент растёт. В уроке Catlike Coding есть код шейдера, импорт карты без sRGB для хранения векторов и разбор артефактов DXT1.
  • ❤ 2
Post #2062 994
Как рассчитать поле зрения и освещение на 2D-карте

В разборе Red Blob Games показан алгоритм для стен из отрезков. Лучи направляются к началу и концу каждой стены, а ближайшие пересечения задают треугольники.

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

Результат пересекают с кругом, градиентом или конусом, чтобы ограничить обзор, добавить затухание света или фонарик. Расчёт применим к факелам, камерам и поиску укрытий игровым ИИ. Есть песочница и код на Haxe, но автор предупреждает о пропущенных оптимизациях и проблемах численной устойчивости: для проекта лучше изучить более надёжные реализации по ссылкам.
  • ❤ 2
Post #2061 1.03K
⚡️ Запустите Web Shop, выполняйте задания и выигрывайте призы

Xsolla приглашает разработчиков мобильных игр на Web Shop Arena 2026 — конкурс с призовым фондом $100 000.

Это не просто соревнование: вместе с экспертами Xsolla вы шаг за шагом построите собственный канал прямых продаж — от запуска Web Shop и настройки платежей до продвижения и LiveOps.

Каждая студия получает возможность выиграть до $5 000 за выполнение челленджей. А 4 студии с лучшими Web Shop в финале смогут выиграть дополнительные призы — от денежной выплаты до рекламного бюджета на сумму до $18 000 с партнёром Emarka.

Заявки принимаются до 30 сентября.

➡️ Подать заявку
Post #2060 966
Как убрать задержку управления с помощью предсказания на клиенте

При авторитетном сервере команда проходит до сервера и обратно, прежде чем игрок увидит движение. Предсказание на клиенте убирает эту паузу: клиент сразу применяет ввод локально, а сервер по-прежнему определяет истинное состояние мира.

Сложность начинается, когда ответ приходит после нескольких команд. Клиент присваивает каждой порядковый номер, а сервер возвращает номер последней обработанной. Получив ответ, клиент принимает состояние сервера, удаляет подтверждённые команды и заново применяет ещё не обработанные. Так персонаж не прыгает назад из-за запоздалого снимка мира.

В разборе Габриэля Гамбетты есть схемы с задержкой 100 и 250 мс и важная граница: эффект атаки можно показать сразу, но здоровье противника лучше менять только после ответа сервера.
  • 👍 1
Post #2059 1.06K
Как Wave Function Collapse генерирует сетку из тайлов

Wave Function Collapse (WFC) строит генератор на решении ограничений. Каждая клетка сетки хранит набор допустимых тайлов, а правила задают, какие края соседних тайлов могут соприкасаться.

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

В материале Wave Function Collapse Explained механику сначала разбирают на мини-судоку, а затем переносят на сетку 3×3. Разбор пригодится, если хотите реализовать управляемую процедурную генерацию и понимать, почему тайл сокращает варианты вокруг.
Older posts →

About this channel

How can I read @make_game without a Telegram account?
TGViewer shows the public web preview Telegram publishes for GameDev: разработка игр: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does GameDev: разработка игр have?
GameDev: разработка игр (@make_game) has 7.63K subscribers on Telegram, refreshed roughly every 30 minutes.
Does GameDev: разработка игр know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →