Files
Alexander Borisov 31826bd4e0 task update
2026-04-08 20:48:11 +03:00

5.5 KiB
Raw Permalink Blame History

id, title, summary, priority, area, owner, created, updated, execution_time, depends_on, canonical_docs, related_files
id title summary priority area owner created updated execution_time depends_on canonical_docs related_files
TASK-0023 Runtime NavMesh bake для voxel-чанка Реализовать генерацию/обновление NavMesh в рантайме для каждого voxel-чанка, чтобы враги могли корректно ходить по процедурному миру. Highest ai abysscion 2026-03-31 2026-04-08 2d
TASK-0003
docs/tasks/Index.md
docs/architecture/mvp-world-authority-navmesh.md
docs/plans/TASK-0023-runtime-navmesh-implementation-plan.md
Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs

TASK-0023 - Runtime NavMesh bake для voxel-чанка

Status

Статус задачи ведется в docs/tasks/Index.md и является каноническим там.

Why

AI врагов (TASK-0012) опирается на NavMesh. Воксельный мир генерируется чанками в рантайме, значит навигация должна обновляться динамически, иначе враги не смогут корректно находить путь.

Expected Outcome

  • Для активных чанков есть актуальный NavMesh, соответствующий walkable поверхности.
  • При загрузке/обновлении чанка навигация перестраивается предсказуемо и без зависаний.
  • Есть понятные границы: когда перестраиваем NavMesh, когда откладываем, как ограничиваем стоимость.

Current Context

VoxelWorldGenerator строит mesh/collider для чанка. Это хорошая опора для NavMeshSource сборки, но нужно аккуратно сделать runtime bake на уровне чанка или группы чанков.

Scope In

  • определить модель bake: per-chunk NavMeshData, либо один NavMeshData на область вокруг игрока
  • собрать NavMesh build sources из чанка (MeshCollider/BoxCollider/Renderer)
  • обновлять NavMesh при загрузке/выгрузке чанков
  • ограничения производительности: throttle, бюджет на кадр, батчирование

Scope Out

  • полноценный crowd simulation
  • оптимизация под большие карты без ограничений

Constraints

  • runtime bake не должен фризить игру
  • результат должен быть одинаков в рамках одного мира при одинаковых чанках

Suggested Approach

  1. Выбрать подход: NavMeshSurface (если используется пакет) или ручной NavMeshBuilder.UpdateNavMeshDataAsync.
  2. Определить build bounds по чанку и собрать build sources по его коллайдерам.
  3. Встроить вызов bake в lifecycle чанка: после генерации mesh/коллайдера.
  4. Добавить throttling и очереди обновлений.

Acceptance Criteria

  • после генерации чанка враг способен построить путь по поверхности чанка
  • при выгрузке чанка навигация не содержит "висячих" областей

Verification

  • ручной тест: враг преследует игрока при перемещении между чанками
  • стресс тест: быстро двигаться по миру и убедиться, что обновления не фризят

Risks / Open Questions

  • нужно определить, как синхронизировать bake с сетевой моделью (сервер/клиент) и где AI реально работает

Human Decisions Needed

  • none currently

Decision Log

  • 2026-03-31 - runtime bake вынесен в отдельную задачу как prerequisite для enemy NavMesh AI.
  • 2026-04-08 - runtime NavMesh sidecar реализован через contracts + DI + MessagePipe, а базовый local-build pipeline переведен на clustered coverage windows отдельной follow-up задачей.

Handoff Notes

Реализация задачи должна идти с учетом принятых решений и уже проведенного ресерча в docs/architecture/mvp-world-authority-navmesh.md, docs/plans/TASK-0023-runtime-navmesh-implementation-plan.md и текущего runtime-контекста Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs. Если формулировки task-card расходятся с каноническими решениями и зафиксированным ресерчем, приоритет у этих файлов.

Если в проекте нет пакета NavMeshComponents, возможно придется добавить его или реализовать минимальный runtime builder.

Задача закрыта как базовый infrastructural milestone. Дальнейшие улучшения pathing, player navigation и coverage policy должны идти отдельными задачами, а не переоткрывать этот базовый runtime NavMesh foundation.