[Fix] Update Tasks to Voxel Engine
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: TASK-0023
|
||||
title: Runtime NavMesh bake для voxel-чанка
|
||||
summary: Реализовать генерацию/обновление NavMesh в рантайме для каждого voxel-чанка, чтобы враги могли корректно ходить по процедурному миру.
|
||||
priority: Highest
|
||||
area: ai
|
||||
owner: unassigned
|
||||
created: 2026-03-31
|
||||
updated: 2026-03-31
|
||||
execution_time: 2d
|
||||
depends_on:
|
||||
- TASK-0003
|
||||
canonical_docs:
|
||||
- docs/tasks/Index.md
|
||||
related_files:
|
||||
- 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.
|
||||
Reference in New Issue
Block a user