Перейти к содержанию

Районы и тестовый город в Unity

Категория текущего исправления: bugfix. Location01 содержит целую городскую карту размером 250 × 170 м, собранную из 18 районов. Район (district) — модуль внутри локации, а не самостоятельная полноценная локация. Location02–Location20 пока остаются существующими небольшими заглушками и в этом исправлении не меняются. Boot, Flow, сохранения, ID и названия миссий сохраняются; отдельная тестовая сцена не добавляется в Build Settings или игровой список локаций.

Unity-проект находится в IdleWorldDominationUnity/. Все пути Assets/... ниже относятся к нему. Для этой работы разрешён установленный Editor 7000.0.0a8; изменение ProjectSettings/ProjectVersion.txt не входит в коммит.

Статус

Первоначальная сборка отдельного тестового города завершена 13 октября 2026 года через подключённый Unity Pipeline, без управления экраном пользователя. Следующие результаты относятся к этой тестовой сборке; подключение целого города к Location01 описано отдельно ниже.

  • Импортированы только 243 нужных исходных ассета; подготовлены 100 повторно используемых префабов моделей и 45 отдельных URP-материалов.
  • Сохранены 18 префабов районов, CityStreets, TestCity, CityPreviewRig и CityTestLighting.
  • Тестовая сцена сохранена и повторно открыта. Все три корня сцены — экземпляры конкретных префабов.
  • Проверены ссылки и статические рендеры общего города, жилого двора, блокпоста и стройплощадки.
  • Ручная приёмка внешнего вида и управления в Play Mode не выполнена. Технические проверки ниже её не заменяют.

Структура

Общий набор городских моделей и районов расположен в Assets/Environment/CityDistricts/. Игровые варианты сохраняют существующие пути Assets/Prefabs/Locations/Location01.prefab … Location20.prefab и Assets/Scenes/Locations/Location01.unity … Location20.unity.

Путь Назначение
Source/ Выбранные исходные префабы, модели, материалы и текстуры шести паков. Сохраняется происхождение ассетов; изменения для просмотра отделены от исходников.
Materials/ Материалы для URP, используемые подготовленными моделями.
Prefabs/Models/ 100 готовых префабов моделей со ссылками на исходные меши и адаптированные материалы. Повторные размещения используют эти префабы.
Prefabs/Districts/ 18 самостоятельных префабов районов с местной дорожной частью.
Prefabs/Infrastructure/ Общая городская дорожная сеть и инфраструктура тестового просмотра.
Prefabs/City/ Готовый составной prefab тестового города с размещёнными районами и общей дорожной сетью.
Runtime/ CityPreviewCameraController.cs, только управление камерой тестового просмотра.

Отдельная сцена: Assets/Scenes/Tests/CityDistrictsTest.unity. Открывать её непосредственно в Editor. Запуск Boot для осмотра города не требуется.

Полные иерархии сцены и префабов авторятся через подключённый Unity Pipeline. Runtime-код не создаёт GameObject, не добавляет компоненты и не ищет дочерние объекты. Камера получает Transform через сериализованную ссылку; singleton и статического изменяемого состояния в новом контроллере нет.

Компоновка города

Источник размещений — districts.json и функция buildComposition в districts-layout.js. Тестовый город использует фиксированный seed 1.

Параметр Проверенное значение
Районы 18, каждый представлен один раз
Сетка 6 × 4 клетки, шаг 40 м
Общий габарит с внешними улицами 250 × 170 м
Активные размещения моделей 676
Объекты районов и площадок 473
Дорожные плитки общей сети 203
Уникальные исходные префабы 100

Число размещений означает экземпляры подготовленных моделей, а не количество всех дочерних GameObject или Renderer. В исходных самостоятельных районах суммарно 635 размещений; составной город использует отдельную общую дорожную сеть, поэтому эти числа не складываются напрямую.

В самостоятельном prefab района группа streets остаётся включённой. Во вложенных экземплярах районов городского prefab эта группа отключается локальным prefab override, а дороги берутся из общей инфраструктуры. Это сохраняет полноценный самостоятельный район и исключает наложение двух дорожных сетей в городе. При ручном составлении другого города нужно сохранять этот принцип и согласовывать повороты и Т-образные перекрёстки с фактическими соседями.

ID района Название Размер, м
residential-court Жилой двор 40 × 40
market-square Рынок у остановки 40 × 40
clinic-triage Госпитальный квартал 80 × 40
repair-loading Мастерская и разгрузка 80 × 40
checkpoint-yard Квартальный блокпост 80 × 40
command-comms Узел связи 40 × 40
pocket-park Сквер с фонтаном 40 × 40
retail-street Улица кафе и магазинов 80 × 40
fuel-service Заправочный двор 40 × 40
fire-service Пожарная часть 80 × 40
warehouse-hub Контейнерный склад 40 × 40
evacuation-camp Пункт эвакуации 40 × 40
bank-corner Банк на углу 40 × 40
cinema-court Кинотеатр и площадь 80 × 40
metro-plaza Площадь у метро 40 × 40
sports-court Баскетбольный двор 40 × 40
municipal-yard Двор коммунальной службы 40 × 40
construction-site Малая стройплощадка 40 × 40

Location01 — целая городская карта

Категория: bugfix. Вместо одного квартального блокпоста первая игровая локация содержит вложенный prefab TestCity: 18 районов, общую сеть CityStreets, 676 размещений моделей и 203 дорожные плитки на площади 250 × 170 м. Дорожные плитки входят в число 676, а не добавляются к нему. Это полная городская композиция для первой локации; остальные 19 больших карт ещё не собраны.

Assets/Prefabs/Locations/Location01.prefab остаётся вариантом LocationRoot, а Assets/Scenes/Locations/Location01.unity сохраняет прежний путь и ID. Прежний экземпляр CityPart_01_checkpoint-yard удалён. Готовый TestCity.prefab вложен под именем CityMap; старые Ground и Landmark0–Landmark3 отключены. Камера и танк по-прежнему принадлежат локации, дополнительный CityPreviewRig в неё не добавляется. Boot, Flow, сохранения, established/core C# и Location02–Location20 этим исправлением не изменяются.

CityMap расположен в локальной точке (38, 0, 35): неизменённый старт танка (0, 0, 0) оказывается внутри города на перекрёстке у метро, в исходной городской точке (-38, 0, -35). Для свободной стартовой области 21 × 21 м один фонарь метро перенесён с (-8, 0.23388854, -6) на (-8, 0.23388854, 3) локальным override этого экземпляра. Все 676 размещений сохранены; исходные TestCity и prefab районов не редактировались.

Город собран целиком, но существующее временное управление остаётся локальным: скорость танка 4, граница движения ±9 м по X/Z и ссылка на Transform сохранены. PlaceholderTankMovement перемещает Transform без решения столкновений. Свободная поездка по всей карте, коллизии, NavMesh и следование камеры ещё не реализованы. Камера с прежним orthographicSize = 38 показывает ближнюю область старта; всю карту можно осмотреть в Scene View или отдельно в Assets/Scenes/Tests/CityDistrictsTest.unity.

Эта композиция использует готовый город 6 × 4 клетки размером 250 × 170 м. Она не является точным переносом плана A01 v2: у того 5 × 4 квартала и 210 × 170 м внутри набережных. Канал, мосты, восемь зон, спавнеры и боссы A01 не добавлялись в этом исправлении.

Location02–Location20 сохраняют ранее существовавшие небольшие городские заглушки с прежними названиями и ID. Они служат проверке переходов и не считаются готовыми полноценными аренами или реализацией биомов из locations.md. Их будущие карты должны собираться целиком из подходящих частей.

Техническая проверка полной карты Location01

После сохранения через Unity Pipeline повторно открыт prefab первой локации. Проверены структура, ссылки, геометрия стартовой области и статические рендеры:

Проверка Результат
Композиция города 18 районов, 203 дорожные плитки, 676 размещений, 1268 активных Renderer
Ссылки окружения 0 отсутствующих мешей, материалов и скриптов
Владение игровыми объектами 1 камера, 1 AudioListener, 1 танк; в сцене единственный prefab-корень
Старые геометрические заглушки 0 активных объектов
Игровой prefab и управление Вариант LocationRoot; прежняя ссылка body на Transform танка, скорость 4, граница 9
Свободная область старта Площадка 21 × 21 м без препятствий; габарит танка при движении ±9 м не попадает в проём метро
Статические виды Общий город, старт и четыре угла области движения; исходная камера с наклоном 55° и orthographicSize = 38
Компиляция completed, failed=false
Console Новых ошибок за время исправления не обнаружено; две исторические ошибки сохранены

Две ошибки Console предшествуют этой работе: timeout первоначального импорта в 13:27 и ошибка Unity Connect token exchange в 15:00, 13 октября 2026 года по Москве. Работа над исправлением началась позднее, в 17:48. Console не очищалась. Статические рендеры и проверка габаритов не подтверждают работу ввода, HUD, Boot, меню или переходов в Play Mode.

Прежний инструмент replace_location_placeholders.py ограничен локациями Location02–Location20: первая локация исключена, чтобы эта операция не могла заменить целую карту одиночным районом.

Ручная приёмка Location01 — не проверено

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

  • [ ] Новый профиль из Boot открывает Location01 с HUD и одним танком; существующий профиль открывает сохранённую локацию.
  • [ ] В Scene View у Location01 видна целая городская карта с 18 районами и общей дорожной сетью; старой отдельной площадки с блокпостом нет.
  • [ ] Танк начинает внутри города у метро. В Game View читается ближняя область старта, танк не перекрывается зданиями или HUD; весь город в этот кадр помещаться не должен.
  • [ ] Движение клавиатурой, геймпадом и виртуальным джойстиком остаётся в прежних пределах ±9 м; стартовая область не пересекается со зданиями или перенесённым фонарём.
  • [ ] Открытие меню останавливает движение; закрытие сохраняет ту же сцену и позицию танка, затем возобновляет управление.
  • [ ] Переход из Location01 в одну из прежних заглушек и обратно оставляет одну игровую сцену, один танк, одну камеру и один UI/flow; повторный запуск из Boot возвращает последнюю успешно загруженную миссию.
  • [ ] Другие 19 локаций сохраняют прежний вид, названия и ID; отдельная тестовая сцена города открывается независимо от игрового маршрута.

Происхождение ассетов

Выборка манифеста содержит 100 исходных префабов из шести паков. Это не импорт всех объектов каждого пака. Полный список имён, исходных путей и использования по районам находится в district-assets.txt.

Пак ID Префабов Исходный архив
Mega Vehicle Kit p4 4 POLY_MegaVehicleKit_Unity.unitypackage
Military Shooting Range p5 23 POLY_MilitaryShootingRange_Unity.unitypackage
New York City Modular p6 3 POLY_NewYorkCityModular_Unity.unitypackage
Survival Medical Kit p7 6 POLY_SurvivalMedicalKit_Unity.unitypackage
Survival Tools p8 15 POLY_SurvivalTools_Unity.unitypackage
Poly Universal Pack p9 49 Poly Universal Pack.unitypackage

Основные городские здания и дороги взяты из Poly Universal Pack. Из New York City Modular выбраны Chair, MenuTable и Rest_Table_01, то есть мебель для кафе и рынка.

Выборка с зависимостями содержит 243 ассета: 100 prefab, 100 FBX, 20 исходных материалов, 22 PNG и один TIF. Манифест сохраняет исходные GUID, пути, принадлежность к паку, использования и SHA-256 архивов. Его проверка подтвердила совпадение хешей архивов с инвентарём и побайтовую идентичность выбранных файлов при подготовке импортного пакета. Это проверка происхождения файлов; она не подтверждает визуальный результат материалов после импорта в URP.

После импорта Unity штатно обновил сериализацию десяти исходных материалов Poly Universal Pack. Остальные 233 тела исходных assets совпадают с подготовленным пакетом; исходные GUID сохранены. Для моделей созданы отдельные URP-материалы: 20 из .mat, 24 из встроенных материалов FBX транспорта и один аналог builtin Default-Material. Настройки прозрачности и масштаб текстуры травы сохранены. У исходной медицинской палатки второй слот материала пустой при двух submesh; только в подготовленном prefab он заполнен материалом её атласа.

Объём тел выбранных исходников — около 56 MiB. Это размер ассетов в проекте, не размер player build. Отдельная тестовая сцена не включена в игровой build. Модели и материалы целого города теперь являются зависимостями игровой Location01; итоговый размер player build и производительность этой интеграции ещё не измерялись.

Камера отдельного тестового города

После открытия CityDistrictsTest.unity включить Play Mode и передать фокус Game View.

Действие Управление
Повернуть обзор вокруг точки фокуса Зажать ПКМ и двигать мышь
Сдвинуть точку фокуса по земле Зажать СКМ и двигать мышь
Перемещаться по земле WASD или стрелки
Ускорить перемещение с клавиатуры Shift
Приблизить или отдалить камеру Колесо мыши
Вернуться к общему виду R

Начальный фокус (0, 0, 0), yaw −35°, pitch 55°, расстояние 360 м. Наклон ограничен диапазоном 20–85°, расстояние — 10–450 м, точка фокуса — ±155 м по X и ±115 м по Z относительно начального фокуса. Движение камеры не управляет игровым танком, не переключает локации и не записывает сохранения. При потере фокуса приложения контроллер не обрабатывает ввод.

Ручная приёмка — не проверено

Каждый пункт ниже требует ручной проверки пользователем. Успешная компиляция или проверка количества prefab не заменяет эти проверки.

  • [ ] Открыть тестовую сцену отдельно: общий вид показывает весь город, Play Mode запускается без игрового HUD, танка или перехода из Boot.
  • [ ] Проверить все 18 районов из таблицы: по одному экземпляру в городе, корректные ориентация, масштаб и высота; здания и мелкие объекты не висят над землёй и не проваливаются под неё.
  • [ ] Осмотреть «Жилой двор» (residential-court, в обсуждении «Живой двор»): второй этаж примыкает к первому, между этажами нет пустоты, крыши и фасады совпадают по положению.
  • [ ] Осмотреть «Квартальный блокпост»: ограждение образует понятный периметр, въезд и выезд связаны с дорогой, шлагбаумы перекрывают проезды, есть проход для людей; эвакуационная часть и узел связи доступны и не пересекаются с постройками.
  • [ ] Осмотреть «Малую стройплощадку»: пол, стены и оконные секции стыкуются, ограждение и ворота образуют читаемый участок, проезд и проходы не заблокированы стройматериалами.
  • [ ] Проверить общую дорожную сеть: нет двойных поверхностей и мерцания, разрывов на стыках, тупых съездов через здания или неверно повёрнутых углов и Т-образных перекрёстков.
  • [ ] Открыть самостоятельный prefab района: его улицы видимы. В городском prefab улицы вложенного района отключены, общая дорожная сеть включена.
  • [ ] Осмотреть URP-материалы с близкого и общего ракурса: нет розовых или пропавших материалов, атласы и цвета совпадают с исходниками; стекло сохраняет нужную прозрачность и не превращает непрозрачные детали в прозрачные.
  • [ ] Проверить ПКМ, СКМ, колесо, WASD/стрелки, Shift и R; при максимальном приближении/отдалении и наклоне управление остаётся предсказуемым, возврат R восстанавливает общий вид.
  • [ ] Переключить фокус на другое приложение и обратно: камера не продолжает самопроизвольное движение.
  • [ ] Убедиться, что Boot, существующий список игровых локаций и Build Settings не получили ссылок на тестовый город; открытие тестовой сцены не меняет сохранённую игровую локацию.

Проверка первоначальной тестовой сборки

Результат получен через подключённый Unity Pipeline после сохранения и повторного открытия сцены.

Проверка Результат
Выбранные исходники и зависимости импортированы, ссылки разрешаются В сохранённой сцене: 0 missing mesh, 0 пустых material slots, 0 missing scripts
100 префабов моделей и их URP-материалы 100 моделей, 45 материалов; все Renderer сцены используют URP/Lit
18 районов и городской prefab, количество активных размещений 676 активных размещений, 18 отключённых локальных streets; 1268 активных Renderer
Сцена сохранена по указанному пути, нет отсутствующих компонентов Повторно открыта; 3 prefab-корня, без несохранённых изменений
recompile_status после нового кода completed, failed=false, compilationFailed=false
console --level error --tail 50 и console_status Один исторический Pipeline timeout при окне Missing Signature; импорт затем завершился. Console не очищалась
Изменение версии Editor исключено из коммита ProjectVersion.txt, все автоматические изменения ProjectSettings и существующего URP Global Settings оставлены вне feature-коммита
Ручные игровые и визуальные проверки выше Не выполнены

Проверены 606 опорных точек объектов районов и 203 дорожных плитки: расхождение с запланированными center/bottom anchors менее 0,00001 м. 29 модульных частей домов используют исходный prefab pivot, без дополнительного центрирования. На статическом рендере разрывов между этажами не видно; ручной осмотр со всех сторон остаётся в чек-листе.

Unity сообщает о самопересекающихся полигонах в исходных FBX транспорта, верстака, сварочного аппарата, лестницы и металлического стола; такие полигоны отбрасываются импортёром. Также сохраняются предупреждения существующих пакетов проекта. Эти исходные меши не переписывались; при ручной приёмке нужно осмотреть мелкие детали транспорта и инструментов. Ошибок компиляции нового контроллера нет.

Первоначальный набор районов и отдельный тестовый город относились к feature. Область текущего исправления — bugfix: вместо одного квартала в Location01 подключена целая карта через Unity Pipeline. Исходные prefab города и районов, остальные 19 игровых локаций, Boot, Flow, сохранения и established/core C# не изменяются. Версия Unity и автоматические изменения настроек проекта не входят в исправление. Ручное поведение остаётся непроверенным.