# 后端对接文档(Unity 前端) > **版本**:V1.1 > **日期**:2026-06-12 > **Unity 版本**:2022.3.62f3c1 --- ## 一、交付物 从仓库取以下内容,拖入 Unity 项目: ``` src/Unity/Assets/Plugins/ ← 16 个 DLL(Core + sqlite + JSON) src/Unity/Assets/Scripts/Managers/ ← 桥接脚本 data/default_ammo.json ← 默认弹药参数(放到 persistentDataPath 下) ``` --- ## 二、快速验证 1. 拖入上述目录,等 Unity 编译 2. 创建空 GameObject,挂 `ManagerVerification` 3. Inspector 右键 → `Run Full Verification` 4. Console 看到 7 行 OK --- ## 三、核心流程 ### 3.1 创建想定 & 获取推荐方案 ```csharp var scenario = GetComponent(); var task = scenario.CreateTask("拦截活塞式无人机", ""); scenario.SaveScene(task.Id, new CombatScene { WindSpeed = 3 }); scenario.SaveTarget(task.Id, new TargetConfig { PowerType = (int)PowerType.Piston, ... }); scenario.SaveRoute(task.Id, routePlan, waypoints); // 推荐方案(自动从数据库读弹药规格) var detail = scenario.GetDetail(task.Id); var ammoCatalog = db.Table().ToList(); // DatabaseManager 已种子 var rec = new DefaultDefenseAdvisor(ammoCatalog).Recommend(new ThreatProfile { ... }); // 应用到想定 scenario.SaveCloud(task.Id, rec.Best.RecommendedCloud); scenario.SaveDeployment(task.Id, rec.Best.Platforms.Select(p => new EquipmentDeployment { ... }).ToList()); ``` ### 3.2 启动仿真(事件驱动) ```csharp var runner = GetComponent(); // 推荐方案的 FireSchedule 直接传给引擎 runner.Engine.SetFireSchedule(rec.Best.FireSchedule); runner.LoadAndStart(task.Id); runner.Engine.TimeScale = 4f; // 加速 // 订阅事件,不需要每帧遍历 NewEvents runner.Engine.OnMunitionLaunched += m => Instantiate(shellPrefab, ToVector3(m.PosX, m.PosY, m.PosZ)); runner.Engine.OnCloudGenerated += c => SpawnCloud(c.Dispersion.Center, c.Dispersion.Radius); runner.Engine.OnDroneDestroyed += d => PlayExplosion(d.PosX, d.PosY, d.PosZ); runner.Engine.OnDroneReachedTarget += d => ShowReached(d.PosX, d.PosY, d.PosZ); runner.Engine.OnZoneIntruded += (d, z) => AlertIntrusion(z.Name); runner.Engine.OnSimulationEnded += () => GenerateReport(); // 不需要手动 Tick —— SimulationBootstrap 已封装好了 ``` ### 3.3 仿真事件一览 | 事件 | 参数 | 触发时机 | |------|------|------| | `OnMunitionLaunched` | `MunitionEntity` | 发射计划时间到达 | | `OnCloudGenerated` | `CloudEntity` | 弹药到达释放高度 | | `OnDroneDestroyed` | `DroneEntity` | HP ≤ 0 | | `OnDroneReachedTarget` | `DroneEntity` | 到达最后航路点 | | `OnZoneIntruded` | `DroneEntity`, `ControlZoneEntity` | 进入管控区 | | `OnSimulationEnded` | 无 | 所有无人机状态 ≠ Flying | --- ## 四、Manager API ### ScenarioManager ```csharp var mgr = GetComponent(); SimTask task = mgr.CreateTask("任务名", ""); // 空字符串 = 自动编号 SIM-yyyyMMdd-xxx mgr.SaveScene(id, combatScene); mgr.SaveTarget(id, targetConfig); mgr.SaveDeployment(id, equipmentList); mgr.SaveCloud(id, cloudDispersal); mgr.SaveRoute(id, routePlan, waypoints); TaskFullConfig detail = mgr.GetDetail(id); PagedResult result = mgr.Search("关键词", from, to, page, pageSize); ``` ### SimulationRunner ```csharp var runner = GetComponent(); runner.Engine.SetFireSchedule(fireEvents); // 从推荐方案取 runner.LoadAndStart(taskId); runner.Engine.TimeScale = 4f; runner.Engine.State / Drones / Clouds / Munitions / Events runner.Stop(); ``` ### ReportManager ```csharp var mgr = GetComponent(); var config = scenario.GetDetail(taskId); var report = mgr.Generate(taskId, config, runner.Engine.Events.ToList(), runner.Engine.Drones[0].Status.ToString(), runner.Engine.SimulationTime); string path = mgr.Export(report.Id); // → persistentDataPath/reports/xxx.md ``` ### ReplayController ```csharp var replay = GetComponent(); replay.LoadReplay(taskId); // replay.TotalFrames / replay.GetFrame(frameIndex) ``` --- ## 五、默认弹药 首次运行 `DatabaseManager.OpenMainDb()` 会检查 `persistentDataPath/default_ammo.json`。如果存在且 `AmmunitionSpec` 表为空,自动导入。 当前默认参数(`data/default_ammo.json`): | 参数 | 惰性气体弹 | 活性材料弹 | 活性燃料弹 | |------|------|------|------| | 药剂质量 | 10 kg | 12 kg | 10 kg | | 爆发药 TNT | 1.5 kg | 4.0 kg | 1.5 kg | | 初始半径 R₀ | 3.75 m | 5.14 m | 3.75 m | | 扩散模型 | 三阶段(爆轰→湍流→高斯) | | | --- ## 六、更新后端 ```bash cd src/CounterDrone.Core dotnet publish -c Release -o ../../unity_plugins # 覆盖 Assets/Plugins/CounterDrone.Core/ 下所有 DLL ``` --- ## 七、参考 | 文档 | 位置 | |------|------| | 架构设计 | `docs/design/architecture/总体架构设计.md` | | 实体事件映射 | `docs/design/technical/仿真器实体与事件映射.md` | | 任务跟踪 | `docs/implementation/tasks/实施计划与任务跟踪.md` | | 测试报告 | `test/reports/`(每次集成测试自动生成) | | 测试状态 | **129 测试,95.4% 行覆盖率,12 秒** |