Районы и тестовый город в 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 и автоматические изменения настроек проекта не входят в исправление. Ручное поведение остаётся непроверенным.