GameDev: разработка игр
7.63K subscribers
944 photos
203 videos
1 file
1.36K links
Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Как Unity загружает ассеты по отдельности

Одному персонажу нужна текстура, а её AssetBundle тянет за собой другие данные. Размер и состав пакетов приходится продумывать заранее: они влияют и на загрузку, и на расход памяти.

В Unity 6.6 появились content directories. Меши, текстуры и другие артефакты можно загружать и освобождать независимо. Манифест хранит зависимости, а адресация по содержимому помогает устранять дубликаты.

Разбор устройства content directories показывает сборку, асинхронную загрузку и новый тип ссылок Loadable<T>. В текущей версии технология работает с контентом, поставляемым вместе с Player. Полноценная доставка отдельных ассетов по сети заявлена для поколения Unity 7.
Как разделить предметы и слоты инвентаря в Godot

Двадцать стрел в рюкзаке имеют одно описание и количество 20. Хранить название, иконку и свойства заново в каждом слоте нет необходимости.

В разборе инвентаря на Resource ItemData содержит общие данные предмета, а ItemSlot — ссылку на него и количество. Для оружия, щитов и расходников используются отдельные типы ресурсов; конкретные предметы настраиваются в .tres-файлах.

Логика инвентаря добавляет предметы в стеки, ищет подходящие и пустые слоты, уменьшает количество при удалении. Такое разделение позволяет менять описание предмета отдельно от содержимого рюкзака. Код экипировки — следующий шаг: наличие WeaponItemData само по себе его не реализует.
❤1
Как собрать физическую дверь или мост в PlayCanvas

Дверь должна вращаться вокруг петли, а доски подвесного моста — проседать под нагрузкой. Для такого поведения подходят соединения rigid body: они ограничивают движение тел относительно друг друга.

В PlayCanvas Editor 2.32 Joint-компонент можно полностью настроить в инспекторе. Доступны Fixed, Ball, Hinge, Slider и 6DoF. У шарнира есть пределы вращения и мотор, у соединений — порог импульса для разрушения.

Разбор Joint-компонента показывает настройки и примеры применения. Для работы нужны Ammo и rigidbody у связанных объектов. Если второе тело не указать, соединение закрепит первое в пространстве мира. Пружины и ограничения по отдельным осям настраиваются через 6DoF.
❤1
Как найти память, которую удерживает выгруженная сцена

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

В предварительной версии Memory Profiler 1.2.0-pre.1 появилась таблица Roots & Impact. Она показывает, какие корни удерживают объекты и сколько памяти связано с этими цепочками ссылок. Можно отдельно посмотреть статики, сцены и AssetBundle.

Разбор нового представления объясняет поиск Leaked Managed Shells и фильтрацию утечек по размеру. Место создания объекта не всегда объясняет, почему он до сих пор жив: здесь полезнее проследить удерживающие ссылки. Пакет пока имеет статус pre-release.
❤1
Как связать рычаг и мост из разных сцен в Godot

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

В разборе системы переключателей связь проходит через SwitchBus, добавленный в Autoload. SwitchTrigger меняет значение переключателя, а SwitchMonitor следит за ним. Оба используют один идентификатор.

Рычаг получает область взаимодействия и меняет состояние триггера. Мост реагирует через монитор и AnimationPlayer. Объекты можно разместить в разных сценах: посредник хранит состояние между переходами. Для сохранения после закрытия игры понадобится отдельно записывать эти данные на диск.
❤1
Что Defold 1.13.2 добавил для интерфейсов и 3D-физики

Цветной текст, встроенные спрайты и анимированные надписи теперь можно делать средствами Defold. В версии 1.13.2 rich text появился у Label-компонентов и текстовых GUI-узлов.

Для 3D-проектов расширился Lua API Bullet: доступны миры, тела, формы и ограничения. Добавились collision meshes для подробной статической геометрии. Редактор также получил HTTP-методы для сборки и запуска проектов.

Разбор релиза перечисляет новые возможности и изменения при обновлении. В существующем проекте стоит проверить собственные HTML-шаблоны, настройки Android R8 и переименованную константу события окна. Полные release notes связаны с анонсом.
Как SuperSplat сократил память для тяжёлых 3D-сцен

В Gaussian Splat-сцене могут быть миллионы элементов. Если держать полные копии данных в JavaScript, загрузка и экспорт быстро упираются в память браузера.

SuperSplat Editor 3.0 перенёс проекцию, отсечение, сортировку и операции выделения на GPU. Данные хранятся порциями в GPU storage, экспорт тоже идёт по частям.

В разборе перехода на WebGPU приводят сцену из 4,4 млн сплатов: JavaScript heap в загруженном состоянии снизился с 1557 до 105 МБ. Это замер памяти JavaScript, он не включает всю память GPU.

Новый редактор требует WebGPU. Для тяжёлых сцен есть режим Stochastic Alpha: во время движения он позволяет временно обходиться без дорогой сортировки.
❤2
Как масса влияет на бросок шара в Unity

Шар запускается вперёд, сталкивается с кеглей и почти останавливается. В учебной сцене причина может быть простой: у шара и кеглей одинаковая масса.

В разборе боулинга на Unity бросок выполняется через Rigidbody.AddForce с ForceMode.Impulse. Импульс применяется сразу и учитывает массу: более тяжёлому шару для той же скорости нужен больший импульс.

Кеглю собирают из Capsule Collider и небольшого Box Collider у основания. Модель остаётся дочерним объектом, физические компоненты размещаются на родительском. UI-кнопка вызывает публичный метод броска. На этом примере удобно проверить соотношение масс и форму коллайдеров до настройки сложной игровой физики.
Как уложить замысел игры в одну страницу

В большом дизайн-документе легко потерять основной цикл: что игрок делает снова и снова и ради чего возвращается к этим действиям.

One-page GDD помогает сначала собрать общую картину. В коротком документе связываются основной игровой цикл, составляющие его механики и особенность, по которой проект будет узнаваем.

Пример такого GDD показывает подход к организации этих элементов и возможность позже развернуть документ в подробный.

Для собственного прототипа можно начать с цепочки действий игрока и отметить, какая механика меняет привычный опыт. Если связи между действиями пока неясны, их стоит проверить в прототипе перед детализацией уровней и контента.
✍2
Как Godot переименовывает символы с учётом контекста

Переменная называется speed в нескольких методах. Простая замена текста затронет все совпадения, включая комментарии и строки, хотя изменить нужно только одну переменную.

В Godot 4.8 dev 7 появился инструмент переименования символов. Он учитывает контекст: различает идентификаторы классов, локальные переменные с одинаковыми именами, строки и комментарии.

В разборе предварительной сборки показаны примеры такого рефакторинга. Функция пока экспериментальная и требует отдельного включения.

Это возможность для проверки на копии проекта: переименовать символ и просмотреть изменения во всех затронутых скриптах. Godot 4.8 dev 7 пока остаётся сборкой для тестирования.
❤2
Как перейти с EDM4U на менеджер зависимостей Unity

Реклама, аналитика и покупки приносят в мобильную игру собственные Android- и iOS-библиотеки. Их версии могут конфликтовать ещё до запуска приложения.

Unity выпустила официальный External Dependency Manager через UPM. Он основан на EDM4U и читает те же XML-файлы зависимостей. Пакет бесплатен для Unity 2022.3 и новее; Google объявила deprecation EDM4U на 26 октября.

В инструкции перехода предлагают установить EDM и выбрать активный менеджер. Если EDM4U пришёл вместе со сторонним SDK, его советуют оставить до обновления этого SDK. После переключения стоит проверить сборки обеих платформ и разрешение нативных зависимостей.
Как начислять очки за победу над врагом в Godot

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

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

Объекты получают компонент с нужным количеством очков. Работа с Autoload-счётчиком сосредоточена в одном месте: дверям, противникам и предметам не приходится напрямую вызывать singleton.

При добавлении нового способа исчезновения врага важно проверить, какое событие запускает награду. В этом примере условие — исчерпание здоровья.
❤2
Forwarded from Нейроканал
Showboat и Rodney помогают показать работу ИИ-агента

Саймон Уиллисон собирает демонстрации кода с помощью двух своих инструментов. Showboat выполняет команды и записывает их вывод в документ. Rodney управляет Chrome из командной строки и делает скриншоты интерфейса.

uvx showboat --help

Эту команду автор предлагает дать агенту: в справке есть всё необходимое, чтобы тот создал документ с демонстрацией новой функции.

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

#ии #инструменты
💔2