Files
TheDeclineOfWarriors/docs/tasks/items/TASK-0023.md
T

4.3 KiB

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 unassigned 2026-03-31 2026-03-31 2d
TASK-0003
docs/tasks/Index.md
Assets/Scripts/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.

Handoff Notes

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