# 实施计划与任务跟踪 > **项目**:反无人机仿真系统后端 > **文档版本**:V1.7 > **更新日期**:2026-06-20 --- ## 一、阶段总览 ``` Phase 1 ✅ 核心基础 Phase 2 ✅ 想定管理 Phase 3 ✅ 算法层 Phase 4 ✅ 仿真引擎 Phase 5 ✅ 报告生成 Phase 6 ✅ Unity 集成(桥接层 + 示例项目) Phase 7 ✅ 打磨收尾 Phase 8 ✅ 天气/物理模型统一 Phase 9 ✅ 性能优化 + 架构文档校准 Phase 10 ✅ 探测实时链路(已完成) Phase 11 ✅ 运动学重构 + 实体暴露 + 基础数据 CRUD Phase 12 ✅ 空基/地基统一规划 + 编队轴 + LaneDivider Phase 13 ✅ 模型重构:分层架构 + 代码审查 + 探测分离 ──────────────────────── 已完成 P1-P13 ``` --- ## 二、各阶段详情 ### Phase 1:核心基础 ✅ **目标**:搭建项目骨架,数据层可读写,单元测试全绿。 **测试**:27 个 | # | 任务 | 状态 | |---|------|------| | 1.1-1.12 | 项目骨架、枚举、数据模型、Repository、ModelService、单元测试 | ✅ | --- ### Phase 2:想定管理 ✅ **目标**:仿真任务的完整 CRUD + 5 步配置保存/加载 + 搜索分页。 **测试**:20 个 | # | 任务 | 状态 | |---|------|------| | 2.1-2.14 | 8 个 Repository、ScenarioService、搜索分页、输入校验、单元测试 | ✅ | --- ### Phase 3:算法层 ✅ **目标**:高斯烟团扩散模型、三种毁伤模型、防御推荐算法全部实现。 **测试**:26 个 | # | 任务 | 状态 | |---|------|------| | 3.1-3.12 | GaussianPuffDispersion、InertGas/ActiveMaterial/ActiveFuel 毁伤模型、DefaultDefenseAdvisor、AlgorithmFactory | ✅ | **关键设计变更**: - 推荐算法由弹药规格驱动,查库选型 - 计算多轮次云团(CloudSalvo)确保覆盖率 - 输入校验:无目标/无航路/弹药缺失时返回失败原因 - Kinematics 工具类:抛物线弹道、风矢量、多边形判定 --- ### Phase 4:仿真引擎 ✅ **目标**:完整仿真引擎 + 集成测试。 **测试**:11 个 | # | 任务 | 状态 | |---|------|------| | 4.1-4.16 | 6 个实体类、FireSchedule 发射计划、FrameDataStore 分库、Pause/Resume/Stop、集成测试 | ✅ | **关键设计变更**: - 引擎重构为纯执行器:`SetFireSchedule()` 接收计划,不包含任何决策 - `TimeScale` 属性支持加速仿真(集成测试 4 倍速) - 弹道飞行时间用 `Kinematics` 真实计算 - 集成测试:4 个端到端场景全通过(NoDefense/ZoneIntrusion/Piston/Jet) --- ### Phase 5:报告生成 ✅ **目标**:仿真结束后自动生成 Markdown 报告并导出文件。 **测试**:7 个 | # | 任务 | 状态 | |---|------|------| | 5.1-5.8 | ReportGenerator、ReportService、ExportToFile、搜索分页、单元测试 | ✅ | **注**:PDF 导出已实现(见 8.2.1),仿真后自动生成 MD,PDF 按需调用 `ExportReport(id, "pdf")`。 --- ### Phase 6:Unity 集成 ✅ **目标**:将 Core.dll 集成到 Unity,实现完整运行链路。 **前置条件**:安装 Unity Hub + Editor 22.3.62 **位置**:`src/Unity/`(完整 Unity 项目) | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | 6.1 | 创建 Unity 项目,导入 Core.dll | 1h | ✅ | `src/Unity/` 项目,16 个 DLL → `Assets/Plugins/` | | 6.2 | 实现 `UnityPathProvider` | 1h | ✅ | `Application.persistentDataPath` 桥接 | | 6.3 | 实现 `ModelManager` | 3h | ✅ | 导入/删除/查询,含 Verify | | 6.4 | 实现 `ScenarioManager`(5 步配置) | 4h | ✅ | 完整 CRUD + 搜索分页 + 多批次 Route | | 6.5 | 实现 `SimulationRunner`(Update 驱动) | 3h | ✅ | Tick 驱动 + 事件订阅 + 实体位置同步 + 炮弹轨迹可视化 | | 6.6 | 实现 `ReplayController`(帧加载) | 3h | ✅ | 从分库加载帧数据,TotalFrames/GetFrame | | 6.7 | 实现 `ReportManager` | 2h | ✅ | 生成 + Markdown 导出 | | 6.8 | 3D 实体可视化 | 4h | ✅ | Drone/Cube、Cloud/Sphere、Munition/Cylinder,逐帧位置同步 | | 6.9 | 粒子系统参数传递 | 3h | ✅ | 云团半径缩放 + 颜色/透明度动态更新 | | 6.10 | 端到端联调 + 一键验证 | 6h | ✅ | `ManagerVerification` 7 模块全过,`SimulationBootstrap` 一键 Demo | **额外交付物**: - `SimulationBootstrap.cs`:一键创建想定 → 推荐方案 → 启动仿真(Scene 直接运行) - `simple_simulation.unity`:预配置场景文件 - `ManagerVerification`:Inspector 右键 `Run Full Verification` → Console 7 行 OK --- ### Phase 7:打磨收尾 ✅ | # | 任务 | 状态 | |---|------|------| | 7.1 | 性能优化 | ✅ Tick 热路径优化,Unity 满载帧率 <20→200+ FPS(详见总体架构设计第十三章) | | 7.2 | TTL 清理(FrameDataStore.CleanupExpired + 测试) | ✅ | | 7.3 | 边界测试(空部署/强风/超长航路/空基弹药) | ✅ | | 7.4 | 错误处理加固 | ⬜(基本校验已有) | | 7.5 | 测试覆盖率 | ✅ 95.4% 行 / 80.5% 分支 | | 7.6 | README + API XML 文档 | ✅ | | — | 死代码清理(DetectionEntity, EventQueue) | ✅ | | — | 代码格式化(.editorconfig + dotnet format) | ✅ | --- ## 三、最终指标 | 指标 | 值 | |------|------| | 测试总数 | **262**(全部通过) | | 行覆盖率 | **95%+** | | 分支覆盖率 | **80%+** | | 执行时间 | ~15 秒 | | Core 程序集 | `CounterDrone.Core.dll` (.NET Standard 2.1) | | 共享物理工具类 | `Kinematics` / `RouteGeometry` / `CloudExpansionModel` / `DamageAssessment` | | 全局配置 | `data/planner_config.json`(planner 策略参数,代码零默认值) | | Unity 项目 | `src/Unity/`(Unity 2022.3.62) | | Unity Manager | 8 个 MonoBehaviour 桥接 + Bootstrap + SqliteConnectionTracker | | 零 Unity 依赖 | ✅ Core 可脱离 Unity 独立运行和测试 | --- ## 四、Phase 8:天气/物理统一与功能增强 > 8.0(天气/物理统一)已完成;8.1/8.2/8.3 为后续增强功能,部分待开发。 > UI/视觉/动画属于前端同事范畴,以下仅列后端 Core 的功能。 ### 8.0 天气与物理模型统一(✅ 已完成) | # | 功能 | 说明 | |---|------|------| | 8.0.1 | 天气纳入扩散模型 | ✅ 修复 `GaussianPuffDispersion` 写死 Sunny 的 bug,Phase3 用真实 `env.WeatherType` 推导 Pasquill 稳定度 | | 8.0.2 | Planner 风偏补偿 | ✅ 抛撒点逆风预置(`cloudGen = 穿越点 − windVec×expansionTime`),云团漂移后回到航路 | | 8.0.3 | 去除无人机风偏叠加 | ✅ DroneEntity 不再叠加风位移(真实无人机有飞控修正),planner 与引擎速度模型一致 | | 8.0.4 | PathInSphere 云团参考系修正 | ✅ 毁伤判定改在云团参考系(`drone.Pos − cloud.Center`),修正移动球导致的每 tick ~2m 系统误差 | | 8.0.5 | ComputeEffectiveRadius 云龄 bug | ✅ 从 `ArrivalTime×2`(无人机飞行时间,概念错误)改为 `expansionTime`(云团自身膨胀时长) | | 8.0.6 | 物理模型统一架构 | ✅ 新增 `RouteGeometry` 静态工具类,planner 与引擎共用航路几何;planner 删除所有本地物理公式 | | 8.0.7 | 配置外置 | ✅ 新增 `PlannerConfig` + `planner_config.json`,策略参数(重叠系数、类型系数、弹药匹配、概率阈值)全部从配置读,代码零默认值 | | 8.0.8 | 云团重叠布局 | ✅ 间距 `2R×(1−重叠比例)`,默认重叠 20%,消除相切处密度空洞;offset 沿航路切向,支持任意方向/折线航路 | ### 8.1 仿真增强 | # | 功能 | 说明 | |---|------|------| | 8.1.1 | 探测设备搜索逻辑 | ✅ 事前规划:`DetectionCalculator` 算统一信息网络最早探测点,planner 基于探测边界算到达时间;天气衰减光电;精度影响散布。**实时探测设计完成**(总体架构设计第十四章),待 Phase 10 开发 | | 8.1.2 | 蜂群运动模型 | ⬜ `FormationMode.Swarm` 枚举已定义,需差异化行为(随机扰动、个体差异) | | 8.1.3 | 空基平台 + DefensePlanner | ✅ 五步规划引擎,通道模型,物理间隔错发,路径积分毁伤判定 | | 8.1.4 | 预置典型目标库 | ⬜ 具体无人机型号 JSON 配置(如 DJI Mavic 3、Shahed-136 等),导入 `ScenarioDrone` 默认值 | | 8.1.5 | 毁伤曲线参数校准 | ✅ RequiredExposureSeconds 替代硬编码,密度阈值统一在引擎检查 | | 8.1.6 | Fallback/default 清理 | ✅ 删除所有硬编码默认值和静默 fallback,参数缺失即报错 | ### 8.2 报告与导出 | # | 功能 | 说明 | |---|------|------| | 8.2.1 | PDF 导出 | ✅ PdfSharpCore(netstandard2.0,纯托管 Unity 兼容)+ ReportData 结构化模型 + StandardPdfTemplate 内置标准模板 + CJK 字体嵌入。`IReportService.ExportReport(id, "pdf")` 按需导出,仿真后自动生成 MD 到报告目录 | | 8.2.2 | Word 导出 | ⬜ 调研可行方案 | ### 8.3 第三方对接 | # | 功能 | 说明 | |---|------|------| | 8.3.1 | 第三方 DLL 接口规范 | ⬜ 与供应商对齐 `ICloudDispersionModel` P/Invoke 签名和调用约定 | | 8.3.2 | 扩散模型替换验证 | ⬜ 通过 `AlgorithmFactory.Register` 切换到第三方实现后的集成测试 | --- ## 五、Phase 9:性能优化 + 架构文档校准 ✅ **目标**:Tick 热路径性能优化(Unity 满载 <20→200+ FPS)+ 总体架构设计文档与实现对齐。 ### 9.1 性能优化(✅ 已完成) | # | 任务 | 状态 | 说明 | |---|------|------|------| | 9.1.1 | DroneEntity 航路几何缓存 | ✅ | 构造时预算 `_totalArc`/`_segLen[]`/`_cumArc[]`,Update 内 O(1) 定位段,消除每帧重复几何运算 | | 9.1.2 | 仿真期零字符串分配 | ✅ | EntitySnapshot 强类型字段流转,JSON 推迟到 Flush;Unity 端移除 JsonDocument.Parse(最大收益项) | | 9.1.3 | ControlZoneEntity 顶点 2D 缓存 | ✅ | 构造时缓存 `_vertices2D`,ContainsPoint 零分配 | | 9.1.4 | 帧数据内存缓存+批量落库 | ✅ | List\ struct 缓冲,Flush 单事务 InsertAll | | 9.1.5 | 毁伤判定快速排斥 | ✅ | 浓度阈值 + 2R 距离两层裁剪 | > 详见《总体架构设计》第十三章。优化前后实测:Unity 满载渲染帧率 <20 FPS(卡顿)→ 200+ FPS。 ### 9.2 架构文档校准(✅ 已完成) | # | 任务 | 状态 | 说明 | |---|------|------|------| | 9.2.1 | 修正文档与实现不符 | ✅ | AlgorithmFactory(Func 工厂)、IDefensePlanner.Plan(4参数)、IDamageModel(RequiredExposureSeconds)、FrameDataStore(类非接口)、删除 IRecordService、DroneEntity 弧长运动、Tick 流程顺序、StateData 双轨 | | 9.2.2 | 新增性能设计章节 | ✅ | 总体架构设计 第十三章 | | 9.2.3 | 探测设备行为设计 | ✅ | 总体架构设计 第十四章(双链路 + 3D 球冠 + 5 项决策 + 数据模型清单)| --- ## 六、Phase 10:探测实时链路开发 ✅(已完成) **目标**:实现仿真运行时实时探测(链路 B),产生 `TargetDetected` 事件 + 可视化数据;并将 planner 探测判定升级到 3D 球冠。 **前置设计**:《总体架构设计》第十四章(V13),5 项行为决策已确认(见 14.6)。 **关键约束**: - 实时探测是**纯只读观测层**(决策 3/4),不影响 FireSchedule、不驱动拦截; - **planner 与实时探测必须共用 3D 球冠判定**(`IsInCoverage`)——正确性硬要求,否则会出现"未探测却拦截"的物理错误(详见 T3)。 > 任务依赖关系见 10.5。建议按 T1→T2→T3→T4 顺序,T5/T6 可并行。 ### 10.1 数据层(T1) | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | T1.1 | ScenarioUnit 加 4 列 | 0.5h | ✅ | `MinElevation`/`MaxElevation`/`MinDetectAlt`/`MaxDetectAlt`,均 NULLABLE | | T1.2 | DetectionSource 类扩展 | 0.5h | ✅ | 同步加 4 个三维几何属性(float.MaxValue=无限制,退化 2D) | | T1.3 | BuildDetectionSources 读取新字段 | 0.5h | ✅ | 缺失时退化球冠(float.MaxValue),保证存量数据平滑过渡 | ### 10.2 算法层(T2) | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | T2.1 | DetectionCalculator.IsInCoverage | 1h | ✅ | 3D 球冠判定:水平距离 + 俯仰角 ∈ [Min,Max]Elevation + 高度 ∈ [Min,Max]DetectAlt。float.MaxValue=无限制(退化 2D) | | T2.2 | IsInCoverage 单元测试 | 0.5h | ✅ | 7 个边界用例:球冠内/外、正顶、俯仰越界、高度越界、无限制等价 2D | ### 10.3 planner 3D 适配(T3)🔒 正确性硬要求 | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | T3.1 | EarliestDetection 改采样法 | 2h | ✅ | 从"线段-圆解析求交"改为"沿航路采样点(步长≤50m)调 IsInCoverage"。删除旧 EarliestEntryArc/IsInside | | T3.2 | DefensePlannerTests 回归验证 | 1h | ✅ | 30 个测试全通过,无回归 | > 🔒 **T3 不可砍、不可降级为 2D**。这是正确性硬约束,不是精度优化: > - 仿真是按 planner 规划执行的,**planner 的探测判定 = 仿真的事实依据**。 > - 若 planner 保留 2D 圆判定,会出现"目标高度超出探测设备真实 3D 球冠范围(探测不到),但 planner 按 2D 判定能发现并规划拦截、仿真照此摧毁"的**物理错误结局**——防空系统不可能拦截它没发现的目标。 > - 因此 planner 必须与实时探测共用 `IsInCoverage`(详见总体架构设计 14.2.1)。 > > **关于采样误差(已澄清,可放心)**:采样法 vs 解析法的弧长误差 ≤ 一个步长(50m),换算到推荐抛撒时机 ≤ ~1.5s(120km/h),远小于云团膨胀窗口(~30s)和云团重叠冗余,**不影响火力计划结果**。所以 T3 的重点是用 3D 几何保证"该探测的能探测、不该探测的探测不到",而非追求采样精度。 ### 10.4 引擎层(T4) | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | T4.1 | DetectionEntity 运行时实体 | 1h | ✅ | 持有 DetectionSource + 每无人机探测状态机(Undetected ⇄ Detected)。`UpdateState` 返回首次进入/离开信号 | | T4.2 | SimulationEngine 加 _detectionEntities | 0.5h | ✅ | Initialize 时从 BuildDetectionSources 构建,Tick 第 5 步遍历 | | T4.3 | Tick 第 5 步实时扫描 | 2h | ✅ | 决策 1(离开回退)= Undetected;决策 2(融合取最早/同刻取精度高);触发 TargetDetected(含 OnTargetDetected 事件) | | T4.4 | SimulationEngineTests 验证 | 1h | ✅ | 4 个测试:进入探测范围触发事件、多设备融合取最早、无探测设备无事件、离开后再次进入重新触发 | ### 10.5 前端 / 报告(T5,可并行) | # | 任务 | 预估 | 状态 | 说明 | |---|------|------|------|------| | T5.1 | Unity 探测范围可视化 | — | ⬜ | 前端范畴:3D 球冠 wireframe / 发现标记(决策 4 仅可视化) | | T5.2 | 时序图/报告纳入 TargetDetected | 0.5h | ✅ | ReportGenerator 时序表增加发现事件(👁️ 目标发现);统计增加目标发现计数 | ### 10.6 任务依赖与顺序 ``` T1(数据层)→ T2(算法层 IsInCoverage) ↓ T3(planner 3D 适配 ⚠️耦合点)→ T4(引擎实时扫描) ↓ T5(前端/报告,可并行) ``` **总预估**:约 11h(T1 1.5h + T2 1.5h + T3 3h + T4 4.5h + T5.2 0.5h;前端 T5.1 不计入后端)。 --- ## 六、Phase 11:运动学重构 + 实体暴露 + 基础数据 CRUD ✅ **目标**:抛物线前向计算、空基固定阵位发射、全部实体属性公开、DataService 全 CRUD、LiveFrames 内存回放。 ### 11.1 运动学重构 | # | 任务 | 说明 | |---|------|------| | 11.1.1 | ComputeParabolicRange / ParabolicApex | 正问题:给定 v₀+θ → (射程, 飞行时间) + 顶点参数 | | 11.1.2 | Math.Max 回退全部移除 | CalculateLaunchAngle/ParabolicShellTime/ParabolicTimeOfFlight 非法输入抛异常;GaussianPuffDispersion/CloudExpansionModel Pow 输入验证 | | 11.1.3 | MunitionEntity 前向到达 | launchAngle 必须由方案提供;_arrivesDescending 区分上升/下落;Math.Max 除零移除 | ### 11.2 空基固定阵位 | # | 任务 | 说明 | |---|------|------| | 11.2.1 | DefensePlanner 空基 | ComputeHorizontal 用 platform.PosY;ComputeParabolicRange 前向算时间;云团=到达位置 | | 11.2.2 | 死代码清理 | CommandFlyTo/FlyingToTarget/ReadyToRelease + "到达投放点" 块删除 | ### 11.3 实体属性暴露 | # | 任务 | 说明 | |---|------|------| | 11.3.1 | EntitySnapshot + 速度 | 所有实体帧快照带 VelX/Y/Z;CollectSnapshots 覆盖全部 5 类实体 | | 11.3.2 | CloudEntity | Pos/Radius/Density/Phase/Elapsed 直接属性 | | 11.3.3 | MunitionEntity | LaunchAngle/Azimuth/MuzzleVelocity/FlightDuration/Start/LaunchTime/ElapsedTime/Velocity 全部 public | | 11.3.4 | DroneEntity/PlatformEntity/DetectionEntity | TraveledArc/Progress; Target/FlightDistance; PosX/Y/Z | ### 11.4 基础数据 CRUD | # | 任务 | 说明 | |---|------|------| | 11.4.1 | 类名规范化 | 7 类模板统一命名(*Spec/*Template);SQLite Table+PrimaryKey | | 11.4.2 | 6 个 Repository | SpecRepositories.cs | | 11.4.3 | IDataService + DataService | 全 CRUD,构造注入 | | 11.4.4 | DatabaseManager 建表+种子 | 自动建表 + InsertOrReplace 种子 | | 11.4.5 | Unity 接入 | ScenarioManager.DataService + SimulationRunner.DataService | ### 11.5 回放(LiveFrames) | # | 任务 | 说明 | |---|------|------| | 11.5.1 | FrameDataStore.LiveFrames | Flush 后保留副本;BeginRecording/Discard 清除 | | 11.5.2 | ReplayController 双路径 | LoadReplay(scenarioId, frameStore) 优先内存,回退 SQLite | ### 11.6 测试启用 | # | 任务 | 说明 | |---|------|------| | 11.6.1 | Scenario_3DronesAirBased | 参数对齐,平台间隔 300m,移除 Skip | | 11.6.2 | Scenario_DetectionDriven | 移除 Skip | --- ## 十二、Phase 12:空基/地基统一规划 + 编队轴 + LaneDivider ✅ **目标**:碰撞点后统一流程,编队支持 XYZ 任意轴展开,lane 划分策略可替换。 ### 12.1 运动学修复 | # | 任务 | 说明 | |---|------|------| | 12.1.1 | ComputeParabolicRange 重写 | 从 tanθ 二次改为垂直运动直接算时间,消除与 CalculateLaunchAngle 的不互逆 | | 12.1.2 | 风偏纳入角度 | cloudGen 先于 launchAngle 计算,消除风偏导致的 range≠targetDist | | 12.1.3 | 弹道可达验证 | 每发 PlanUnitLane 验证 ComputeParabolicRange 不抛异常 | ### 12.2 空基/地基统一 | # | 任务 | 说明 | |---|------|------| | 12.2.1 | 碰撞点后无分支 | cloudGen/deliveryTime/fireTime 统一公式,mv 和 launchAngle 按类型取不同值 | | 12.2.2 | 每发独立角度 | launchAngle 对每个目标点重新计算,不共用 InterceptCalculator 的统一值 | | 12.2.3 | 3机空基全灭 | 修复后三机编队全部击毁 | ### 12.3 编队轴 + LaneDivider | # | 任务 | 说明 | |---|------|------| | 12.3.1 | LateralAxis/LongitudinalAxis | RoutePlan + FormationTemplate + DroneEntity 支持 0=X/1=Y/2=Z | | 12.3.2 | ILaneDivider 接口 | 车道划分策略抽象 | | 12.3.3 | DefaultLaneDivider | 宽+深双维度判断,任一超云团半径则拆分 | | 12.3.4 | PlanUnitLane 读轴 | 按 LateralAxis 决定 X/Y/Z 偏移方向 | ### 12.4 探测门控 | # | 任务 | 说明 | |---|------|------| | 12.4.1 | _anyThreatDetected | 引擎等首次探测后才执行发射 | | 12.4.2 | _detectionTime | 发射时间 = fe.FireTime(偏移) + 探测时刻 | ### 12.5 测试 | # | 任务 | 说明 | |---|------|------| | 12.5.1 | Kinematics 俯射往返 | CalculateLaunchAngle→ComputeParabolicRange 往返一致 | | 12.5.2 | 3机空基 | 平台 X 轴分布、无人机 Z 轴分布,交叉维度全覆盖 | --- ## 十三、Phase 13:模型重构 ✅ ### 13.1 数据分层架构 | # | 任务 | 说明 | |---|------|------| | 13.1.1 | ScenarioDrone/ScenarioUnit 精简 | 删冗余基础字段,改为 FK 引用 | | 13.1.2 | DroneSpec/FireUnitSpec 独立文件 | 从 DefaultData.cs 拆出,命名空间修正 | | 13.1.3 | Model/Description 字段 | DroneSpec/FireUnitSpec/SensorSpec 加业务属性 | | 13.1.4 | ModelId 3D 引用 | 仿真实体 + EntitySnapshot +ModelId | ### 13.2 发射平台与探测设备分离 | # | 任务 | 说明 | |---|------|------| | 13.2.1 | LaunchPlatformSpec | 纯发射参数,无探测字段 | | 13.2.2 | SensorSpec 统一探测 | 发射平台自带探测 + 独立探测设备,统一 SensorySpecId 引用 | | 13.2.3 | BuildDetectionSources 简化 | 只查 SensorSpec | | 13.2.4 | FireUnitSpec 保留不用 | 旧类型保留代码不删 | ### 13.3 代码审查 | # | 任务 | 说明 | |---|------|------| | 13.3.1 | Spec 类拆分 | SpecRepositories → 6 个独立文件 | | 13.3.2 | PagedResult/EnumMetadata 独立 | 从 ScenarioConfig/IScenarioService 拆出 | | 13.3.3 | Vector3/DetectionSource 独立 | 从 AlgorithmTypes 拆出 | | 13.3.4 | 死代码清除 | _hasExceededReleaseAltitude | | 13.3.5 | FormationTemplate PrimaryKey | 追加缺失的 SQLite 属性 | ### 13.4 API 增强 | # | 任务 | 说明 | |---|------|------| | 13.4.1 | GetEnums 中英文对照 | EnumItem{Name,ChineseName,Value} | | 13.4.2 | DataServiceTests | 12 个,覆盖 7 类基础数据 CRUD | | 13.4.3 | 全模型 CRUD 补齐 | ScenarioDrone/ScenarioUnit/Route/Waypoint 等 | --- ## 七、里程碑 | 里程碑 | 状态 | |------|------| | M1 — 数据层就绪 | ✅ | | M2 — 想定可配置 | ✅ | | M3 — 算法可计算 | ✅ | | M4 — 仿真可运行 | ✅ | | M5 — 报告可生成 | ✅ | | M6 — Unity 可演示 | ✅ | | M7 — 交付就绪 | ✅ | | M8 — 天气/物理模型统一 | ✅ | | M9 — 性能优化 + 文档校准 | ✅ | | M10 — 探测实时链路 | ✅ | | M11 — 运动学重构 + 实体暴露 + 基础数据 CRUD | ✅ | | M12 — 空基/地基统一规划 + 编队轴 + LaneDivider | ✅ | | M13 — PDF 导出 + 报告模板架构 | ✅ | --- ## 九、待解决问题 | # | 问题 | 说明 | 状态 | |---|------|------|------| | 1 | **高弹道支持** | 当前只支持低弹道。喷气式(ground-standard, 18000m 航线)需要高弹道才能命中。低弹道取上升段时间 t1,弹在 6.5s/5199m 就触发了到达判定,实际应 15.5s/12318m 在下行段命中。需要修改 MunitionEntity 的到达判定逻辑 | 🔴 待解决 | --- ## 八、状态图例 | 符号 | 含义 | |------|------| | ⬜ | 未开始 | | 🔄 | 进行中 | | ✅ | 已完成 | | ⏸️ | 阻塞 | | ❌ | 放弃 |