vampire-like/docs/P1.5 Simulation-Supplement.md

3.3 KiB
Raw Permalink Blame History

P1.5 Simulation 收尾说明P2 输入基线)

测试设备与环境

  • 设备iQOO Neo8
  • CPU第一代骁龙 8+ 八核
  • 内存12 GB
  • 系统OriginOS 6Android 16
  • Unity Profiler 口径:以 CPU ms 为主,fps 仅作辅助Android 端 60 fps 上限)
  • Profiler 配置:Call Stacks = Off(开启会额外放大 CPU 开销,不纳入本次基线)

CPU 分阶段数据P1.5

怪物数量 帧率 MoveSeperation 占比 BuildInput 占比 WriteBack 占比 StateUpdate 占比
500 60 fps (16.56 ms) 25.8% (4.28 ms) 1.2% (0.20 ms) 1.0% (0.17 ms) 0.7% (0.12 ms)
1000 44 fps (22.77 ms) 38.9% (8.86 ms) 1.8% (0.41 ms) 1.5% (0.36 ms) 1.0% (0.23 ms)
1500 33 fps (29.83 ms) 46.7% (13.95 ms) 2.0% (0.61 ms) 1.7% (0.51 ms) 1.1% (0.35 ms)
2000 19 fps (53.04 ms) 43.1% (19.53 ms) 2.1% (0.97 ms) 1.5% (0.69 ms) 1.0% (0.49 ms)

Memory 对比P1 -> P1.5

怪物数量 GC Used Memory GC Allocated In Frame TickEnemies GC
500 7.8 -> 7.9 MB 29.5 -> 2.1 KB 27.4 -> 0 KB
1000 8.8 -> 8.8 MB 56.6 -> 2.1 KB 54.5 -> 0 KB
1500 10.0 -> 9.0 MB 84.2 -> 2.1 KB 82.1 -> 0 KB
2000 11.8 -> 9.9 MB 109.7 -> 2.1 KB 107.6 -> 0 KB

CPU 热路径对比P1 -> P1.5

说明P1.5 的 TickEnemies 以四阶段总和近似对齐 P1 的 TickEnemies ms

怪物数量 P1 TickEnemies P1.5 四阶段合计 降幅
500 6.18 ms 4.77 ms -22.8%
1000 12.80 ms 9.86 ms -23.0%
1500 20.11 ms 15.42 ms -23.3%
2000 29.62 ms 21.68 ms -26.8%

结论Checkpoint 6

  • GC 目标达成:TickEnemies GC500~2000 敌人数下均为 0 KB,满足 < 5 KB/frame 目标。
  • CPU 阶段可观测性达成:BuildInput -> Move/Separation -> StateUpdate -> WriteBack 已可稳定采样。
  • 当前主瓶颈明确:MoveSeperation 是绝对热点(约 43%~47% 帧占比P2 优先并行化该阶段。
  • 评估口径可复现Android 端受 60 fps 上限影响,性能判断以 CPU ms 为准。

路线收敛说明

  • SimulationWorld.Tick(...) 已收敛为战斗内唯一仿真执行入口。
  • 旧的 UseSimulationMovement 兼容属性已删除;运行时不再暴露“是否启用 SimulationWorld 移动”的壳层开关。
  • 敌人、投射物与目标查询的运行时行为统一以 SimulationWorld 主容器和 Burst Job 管线为准。
  • 验证建议:聚焦单一路径下的敌人移动、投射物生命周期、最近敌查询和 area hit 结果,而不是做旧路径 A/B 对照。

P2 交接建议

  • Job/Burst 第一优先级:MoveSeperation 阶段并行化。
  • 保持阶段边界不变:继续维持四阶段管线与 ProfilerMarker,避免失去对比口径。
  • 保持生命周期/索引规则不变:EntitySync 与 swap-back/remap 继续作为硬约束。