Планировка городского квартала для игры — улицы, дома, дворы, проезды, деревья, мусор, кусты — данными и правилами, а не руками в редакторе. Логика советского микрорайона (подъезды во двор, магазины на улицу, садик за забором, гаражи, ЦТП), блок-аут габаритными коробками, раскладка правилами с воспроизводимым зерном, сеть пешеходных дорожек, разрушенный город (обломки у фасадов), проверка проходимости агентами. Используй, когда нужно спроектировать уровень-квартал или район, расставить по нему объекты «чтобы была логика», сделать карту уровня, или когда расстановка выглядит случайной и мёртвой.
Resources
2Install
npx skillscat add sashkosoft/godot-skilled/district-layout Install via the SkillsCat registry.
Планировка квартала
Собрано на первом уровне веб-игры: панельный квартал 70-х, 255 × 185 м внутри
улиц, 10 зданий, 176 деревьев, 257 куч мусора, 1061 куст, 50 роботов-пешеходов.
Главное правило
Один файл данных — источник правды, всё остальное из него выводится.
Квартал — это JSON в метрах (улицы, дома с этажностью и входами, площадки,
правила раскладки). Карта уровня, блок-аут в 3D, граф пешеходов, карта травы —
всё строится одним и тем же кодом из этого файла. Как только карту рисуют
отдельно от игры, они расходятся, и игрок видит на карте дерево, которого нет.
Оси договориться сразу и записать в файл: X — восток, Z — юг, Y — вверх,
прямоугольник [x0, z0, x1, z1]. На карте север сверху — Z вниз по экрану.
Порядок работы
- Логика района словами — кто где живёт и почему. Шпаргалка по советскому
микрорайону и игровым ролям мест —references/microrayon.md. - Данные: улицы (ось, полуширина проезда, тротуар), дома (прямоугольник
или части, этажи, входы со стороной и координатой вдоль стены), площадки,
проезды и тропы ломаными с шириной, мелкие объекты. - Карта (SVG из тех же данных) — показать пользователю логику до 3D.
- Блок-аут габаритными коробками: высота дома = этажи × 3 м + парапет.
Масштаб и видимость проверяются на коробках, до заказа хоть одной модели. - Раскладка правилами — деревья, мусор, кусты:
references/placement.md. - Проверка агентами — пустить пешеходов по графу и посмотреть, куда они
не доходят:references/walk-network.md.
Правила раскладки — коротко
- Зерно у каждого правила, раскладка детерминирована: одинакова на карте
и в игре, между запусками и у всех, кто открыл. - Параметры экземпляра (порода, состояние, материал) — отдельным генератором
от координат, а не из общего потока случайных чисел. Иначе добавил параметр —
и все деревья квартала сдвинулись. - Запреты одни на всех: в дом, на ось проезда/тропы/тротуара (проход
остаётся), перед дверью (круг 2.5 м — в дом можно войти), на площадки,
на ствол, на другой объект. Никаких «исключений под это место». - Зазор по размеру объекта, не фиксированный: коробка кроны повёрнута,
угол торчит на √2·r — соседи не пересекаются приdist > 1.45·(r1 + r2). - Скоплениями, не россыпью. Равномерная случайная россыпь читается мёртвой.
Мусор — у фасадов (сколько: периметр × плотность × высота дома), бурьян —
у стен, заборов, вокруг куч, подрост — у стволов.
Ловушки, на которых уже теряли время
| Симптом | Причина | Что делать |
|---|---|---|
| Асфальта нет, вместо него земля | плита земли выше проезжей части (−0.03 против −0.14) | земля за улицами ниже асфальта, газон двора — отдельной плитой |
| Дальние улицы рябят полосами | плиты в 1 см друг от друга на 250 м — буфер глубины различает ~7 см | зазор между плоскостями ≥ 25 см, ближняя плоскость камеры 0.3 м |
| Пешеходы не доходят до половины двора | дворовая сеть проездов распалась (универсам разрезал) | в граф — тротуары улиц со стороны квартала |
| Трава «на асфальте» | газон в тени высокой башни темнеет до цвета асфальта | снять тот же ракурс без теней, прежде чем чинить |
| Двор бурый, «как песок» | полупрозрачная плашка игровой зоны поверх травы | зоны — лентой по границе, без заливки |
| Трава заезжает на полметра в проезд | размытие карты густоты и линейная выборка | маска дорожек после размытия, с запасом в ячейку |
Проверка
- Карту масок выводить картинкой (густота травы, запреты) и сравнивать со
схемой — одна картинка отвечает на «где сдвинуто» быстрее десятка кадров. - Скриптом по данным: ни один объект не задевает дом, ось дорожки, дверь.
- Агентами: путь каждого за N секунд, максимум отклонения от оси дорожки,
доля времени по состояниям. - Кадром — только после чисел; см. скилы
godot-selfcheck-3d
(харнесс) иmeasurement-sanity(метрика проверяется возмущением).
Пропы правилами
Заборы по контуру, опоры с проводами, бордюр экземплярами, плиты дорожек с судьбой каждой плиты, камешки вблизи, оборудование площадок — от данных квартала; ловушка glTF от gltfpack (масштаб в узле) — references/props-placement.md.