P1.5 Simulation 收尾说明(P2 输入基线)
测试设备与环境
- 设备:iQOO Neo8
- CPU:第一代骁龙 8+ 八核
- 内存:12 GB
- 系统:OriginOS 6(Android 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 GC 在 500~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 继续作为硬约束。