# 帧动画系统第五阶段手动测试 ## 1. 测试准备 1. 在 Unity 执行 `Tools > Frame Animation > Create Phase 5 Preview Sample`。 2. 打开 `Assets/GameContent/Test/FrameAnimation/Preview/PreviewSampleGraph.asset`。 3. 确认通过 Inspector 的 `Open Graph Editor` 进入工作台。 4. 首次测试前将 Node Preview Policy 设为 `SelectedOnly`、速度设为 `1×`、背景设为 `Checkerboard`。 样例构建器只在资产不存在时创建,不会覆盖已经存在的 Preview Sample 或其他测试 Graph。 ## 2. Clip 独立预览 依次选中 `PreviewAction`、`PreviewEmpty` 和 `PreviewIdle`。 - 右侧显示 Clip Preview,顶部与右侧的 Play/Pause、Stop、Restart、Previous、Next 和时间轴保持同步。 - Pause 保留当前帧;Stop 回到实际第 0 帧;Restart 从第 0 帧开始播放。 - 拖动时间轴后保持 Paused,Previous/Next 定位到帧边界。 - `PreviewEmpty` 的空帧显示棋盘格并停留约 300 ms,不跳帧。 - `PreviewIdle` 展示一轮时间轴,总时长显示 `∞`,播放时持续循环。 - 切换 Dark、Light、Checkerboard 后画面背景立即更新,Graph 和 Clip 不变 dirty。 - 测试 Fit、1×、2×、3×、4×、8× 和 Manual;非 Fit 放大后可拖动画面。 ## 3. Node 内嵌预览策略 1. 选择 `Finite Action` Node。 2. 在 `SelectedOnly` 下确认只有主选中 Node 自动播放。 3. 点击 Stop,确认该 Node 停在第 0 帧且不会立即自动重启;重新选择或点击 Play 后恢复。 4. 切换 `Static`,确认所有 Node 显示第一个非空代表帧,选中 Node 仍可使用顶部控制器手动播放。 5. 切换 `AllVisible`,确认视口内 Node 播放;平移使 Node 离开视口后停止更新,移回后重新开始。 6. 框选多个 Node,确认只有主选中 Node成为顶部上下文目标。 ## 4. 有限 Flow 与跨节点时间轴 1. 在 Flows 选择 `PreviewFiniteFlow` 并播放。 2. 确认画布当前 Node、已经过路径和后续路径状态不同。 3. 播放跨过 `Finite Action -> Finite Empty` 时,当前 Node 和 Clip 信息随之切换。 4. 拖动顶部时间轴跨越节点边界,确认对应 Node 与内嵌 Sprite 同步定位。 5. Previous/Next 可以跨节点逐帧。 6. 播放自然结束后保留终点末帧;Stop 回到入口第 0 帧。 ## 5. Loop、零速与结束行为 - `PreviewLoopFlow`:时间轴显示前缀加终点一轮,总时长为 `∞`;进入终点后进度只在终点循环段内循环。 - `PreviewBlockedFlow`:显示零速度阻塞位置,播放状态保持但不推进,时间轴不能越过阻塞点。 - `PreviewClearFlow`:自然结束后显示透明棋盘格并标记 Clear。 - `PreviewHideFlow`:自然结束后同样显示透明内容,但状态标记为 HideTarget。 - 将预览速度依次设为 `0.25× / 0.5× / 1× / 2× / 4×`,确认只改变播放快慢,不改变时间轴总长度。 ## 6. Flow 预览与聚焦 1. 播放任意 Flow,按 Esc 或点击 Exit Focus。 2. 确认全部节点恢复正常亮度,但 Flow 预览继续运行。 3. 选择当前 Flow 内 Node/Edge,确认 Flow 继续播放且顶部仍显示 Flow 目标。 4. 选择 Flow 外 Node、Graph、Clip、Source 或其他 Flow,确认当前 Flow 预览停止并切换上下文。 5. 停止 Flow 后确认原 NodePreviewPolicy 恢复。 ## 7. 修改、刷新与错误 - 播放 Clip/Node 时修改 Sprite、duration、speed 或结束行为,确认预览重建且不使用旧帧引用。 - 播放 Flow 时修改入口、Edge 或 Node Clip,确认 Flow 安全停止,重新 Play 后使用新路径。 - Preview/Refresh ImportSource 后确认活动预览失效并可使用刷新后的 Sprite 重新播放。 - 空 Clip、Missing Clip、负速度和非法 Flow 显示结构化错误,不抛异常、不修改资产。 - 预览期间观察 dirty 状态和 Undo 历史,确认单纯播放、拖动与缩放不产生资产修改。 ## 8. 工作区恢复 1. 修改左右宽度、底部高度、搜索、筛选、排序、选择、画布 pan/zoom 和预览偏好。 2. 切换到其他 Graph 再切回,确认各 Graph 状态独立恢复。 3. 关闭并重新打开窗口,确认状态恢复。 4. 触发脚本重编译或 Domain Reload,确认状态恢复但播放进度不恢复。 5. 确认 Flow 聚焦始终从 Show All 开始,不恢复旧 focusedFlowId。 ## 9. 第一版完整回归 - 按第一至第四阶段文档回归资产管理、导入刷新、节点编排、Flow 聚焦、Undo/Redo 和运行时播放。 - 在 `FrameAnimationRuntimeTest.unity` 验证 SpriteRenderer 与 Image 运行时结果和编辑器预览一致。 - 运行 EditMode、PlayMode、批处理编译和 `git diff --check`。 - 对照 `Docs/动画系统需求整理.md` 第 9 节逐项确认第一版验收标准。