# 帧动画系统第三阶段手动测试 ## 1. 测试目标 验证 `FrameAnimationGraph Editor` 的资源浏览、Manual Clip 编辑、正式重命名、安全删除、ImportSource 集成、校验定位、Undo/Redo 和本机工作区状态。 本阶段中央区域仍是画布占位区,不测试节点创建、连线、Flow 创建或动画预览。 ## 2. 测试前准备 1. 使用 Unity 2022.3.7f1c1 打开项目,等待脚本和资产导入完成。 2. 备份需要保留的测试 Graph;删除 sub-asset 和刷新 Imported Clip 都会修改资产。 3. 可使用现有 `ImportSampleGraph`,也可以通过 `Tools > Frame Animation > Rebuild Import Sample` 重建标准样例。 4. 若重建样例,确认 `Assets/GameContent/Test/FrameAnimation/Import/` 下没有需要保留的手工改动。 5. 打开 `Window > Aibis Dream > Frame Animation Graph Editor`。 ## 3. 打开与布局 ### 3.1 打开入口 分别验证以下入口会打开同一个工作台并选中正确 Graph: - 菜单打开后,从顶部 ObjectField 选择 Graph。 - 在 Project 中双击 `FrameAnimationGraph`。 - 在 Graph Inspector 点击 `Open Frame Animation Graph Editor`。 - 对仅被一个 Graph 引用的 FrameClip,在 Clip Inspector 点击打开按钮或双击资产。 预期:窗口一次只编辑一个 Graph;切换 Graph 后,前一个 Graph 的属性修改不会丢失。 ### 3.2 布局持久化 1. 拖动左侧、右侧和底部面板尺寸。 2. 切换资源标签、搜索词、筛选、排序和底部标签。 3. 关闭并重新打开窗口,再重载脚本或重启 Unity。 预期:面板尺寸、折叠状态、资源标签、搜索筛选、排序、Graph 和有效选择得到恢复;不同 Graph 的状态互不覆盖。 ## 4. 资源浏览与定位 ### 4.1 Clip 查询 1. 在 Clips 中依次搜索 id、displayName、sourceTagName 和来源名称。 2. 测试 Manual、Imported、Normal、Missing、Referenced、Unused 筛选。 3. 测试名称、来源、帧数、时长、Missing 和引用数排序。 4. 清空搜索,确认按 Manual 和 ImportSource 分组;输入搜索词后确认结果变为扁平列表。 预期:每行显示帧数、时长、来源、Missing、Node 引用数和问题标记,结果顺序稳定。 ### 4.2 引用定位 1. 选择无 Node 引用的 Clip,点击 `Locate References`。 2. 选择单引用 Clip,再次定位。 3. 选择多引用 Clip,再次定位并从菜单选择一个 Node。 预期:无引用时显示提示;单引用直接定位;多引用显示选择菜单。Node 在右侧只读显示,中央占位区同步显示当前定位对象。 ### 4.3 校验定位 人为制造一个安全的校验问题,例如将 Manual Frame 的 durationMs 改为 0,然后点击 `Validate`。 预期:Validation 出现结构化条目;点击条目会切换到正确资源标签并显示对应对象和处理建议。 ## 5. Manual Clip ### 5.1 创建 Graph 内 Manual Clip 1. 点击 `New Manual`。 2. 输入唯一 id 和 displayName,保持“外部独立 .asset”关闭。 3. 创建后检查 Project 资产和 Clip 属性。 预期:Clip 是当前 Graph 的 sub-asset;首始帧表为空;结束行为取 Graph 的 `New Manual End Behavior`。 ### 5.2 创建外部 Manual Clip 重复创建流程并勾选外部资产,保存到测试目录。 预期:生成独立 `.asset`,同时加入当前 Graph;取消保存对话框不会产生半成品。 ### 5.3 添加已有外部 Clip 点击 `Add Existing`,分别尝试: - 合法的外部 Manual Clip。 - Imported Clip。 - 其他 Graph 的 sub-asset Clip。 - 当前 Graph 已引用的 Clip。 - id 与当前 Clip 或 Flow 冲突的 Clip。 预期:仅第一种成功,其余给出明确原因。 ### 5.4 编辑帧表 对 Manual Clip 执行新增、复制、删除和拖拽排序,并编辑 Sprite 与 durationMs。 预期:新帧默认为 Sprite 空、durationMs 100、frameName 空、sourceIndex -1;空 Sprite 合法;frameName/sourceIndex 只读。Undo/Redo 能恢复每一步。 ### 5.5 Imported 转 Manual 选择 Imported Clip,点击 `Copy As Manual`,分别测试 Graph sub-asset 和外部资产。 预期:帧表和用户字段被复制,Sprite 引用复用;新 Clip 的 ImportInfo 为空,之后刷新来源不会修改它。Imported Clip 原帧表始终只读。 ## 6. 正式重命名 ### 6.1 Clip ID 1. 选择被 Node 和 defaultPlayableId 引用的 Clip。 2. 点击 `Rename Clip ID`,观察警告和受影响引用数。 3. 尝试空 id、与 Clip 冲突、与 Flow 冲突和合法 id。 4. 成功后执行 Undo/Redo。 预期:普通属性区不能直接编辑 id;合法重命名会原子更新 Clip、全部 Node.clipId 和 defaultPlayableId。Undo/Redo 不产生一半新一半旧的状态。 对被两个 Graph 共享的外部 Manual Clip 重复测试。 预期:禁止重命名,并列出引用它的 Graph。 ### 6.2 Flow 与 Graph ID 分别通过正式按钮重命名 Flow 和 Graph。 预期:Flow 同步更新 defaultPlayableId 和 FlowEditorData;Graph 只更新自身 id。两个对话框均明确提示外部字符串契约无法自动迁移。 ## 7. 删除与所有权 ### 7.1 Clip 依次测试: - 被 Node 引用的 Clip。 - 被 defaultPlayableId 引用的 Clip。 - 未引用的外部 Manual Clip。 - 未引用的 Graph sub-asset Manual Clip。 - 未引用且非 Missing 的 Imported Clip。 预期:前两种在确认前被阻止并可据提示定位;外部 Clip 仅移除当前 Graph 引用且 `.asset` 保留;sub-asset 从 Graph 和资产文件中删除;非 Missing Imported Clip 会提示下次刷新可能重建。 ### 7.2 Flow 测试删除默认 Flow 和非默认 Flow。 预期:默认 Flow 被阻止;非默认 Flow 仅删除 Flow 定义,不删除 Node 或 Edge。 ### 7.3 ImportSource 1. 删除仍有关联 Imported Clip 的来源。 2. 将关联 Clip 删除或复制为 Manual 后再次删除来源。 预期:有关联 Clip 时阻止并列出 Clip;允许删除时不会删除 Texture、JSON、Sprite 或 SpriteRect。 ## 8. 导入与差异 1. 在 Sources 中编辑 displayName、启用状态、Texture、JSON、pivot、切图模式和新 Clip 默认结束行为。 2. 检查 internalId 只读且可复制。 3. 分别执行单来源和全部来源 Preview、Refresh。 4. 对自动切图来源制造 SpriteRect 变化并拒绝确认,再重新刷新并确认。 5. 制造非法 JSON 后 Preview/Refresh。 预期:预览不修改资产;差异按 Added、Updated、Missing、Unchanged、Error 分组并可定位;切图变化必须确认;失败保留完整差异和错误,Graph、Clip、TextureImporter 不出现部分更新。 ## 9. 保存、Undo 与异常恢复 1. 连续执行创建、帧编辑、重命名、删除和 Source 修改。 2. 逐步 Undo,再逐步 Redo。 3. 点击 Save,关闭 Unity 后重开项目。 4. 删除当前窗口正在编辑的测试 Graph。 预期:每个资产操作以具名事务恢复;列表、引用数和校验随 Undo/Redo 重建;保存和 Domain Reload 后数据稳定;资产删除后窗口自动清理失效 Graph 和选择,不抛出持续异常。 ## 10. 通过标准 - 工作台所有入口、布局恢复和统一定位正常。 - Manual、Imported、外部资产和 Graph sub-asset 的所有权行为符合预期。 - id 只能正式重命名,引用迁移原子且可撤销。 - 删除不会留下悬空引用,也不会误删外部资产或导入源资源。 - Import Preview/Refresh、差异和综合校验能在同一窗口完成并准确定位。 - Console 无持续异常;重新打开项目后资产内容和引用保持稳定。