7.5 KiB
帧动画系统第三阶段手动测试
1. 测试目标
验证 FrameAnimationGraph Editor 的资源浏览、Manual Clip 编辑、正式重命名、安全删除、ImportSource 集成、校验定位、Undo/Redo 和本机工作区状态。
本阶段中央区域仍是画布占位区,不测试节点创建、连线、Flow 创建或动画预览。
2. 测试前准备
- 使用 Unity 2022.3.7f1c1 打开项目,等待脚本和资产导入完成。
- 备份需要保留的测试 Graph;删除 sub-asset 和刷新 Imported Clip 都会修改资产。
- 可使用现有
ImportSampleGraph,也可以通过Tools > Frame Animation > Rebuild Import Sample重建标准样例。 - 若重建样例,确认
Assets/GameContent/Test/FrameAnimation/Import/下没有需要保留的手工改动。 - 打开
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 布局持久化
- 拖动左侧、右侧和底部面板尺寸。
- 切换资源标签、搜索词、筛选、排序和底部标签。
- 关闭并重新打开窗口,再重载脚本或重启 Unity。
预期:面板尺寸、折叠状态、资源标签、搜索筛选、排序、Graph 和有效选择得到恢复;不同 Graph 的状态互不覆盖。
4. 资源浏览与定位
4.1 Clip 查询
- 在 Clips 中依次搜索 id、displayName、sourceTagName 和来源名称。
- 测试 Manual、Imported、Normal、Missing、Referenced、Unused 筛选。
- 测试名称、来源、帧数、时长、Missing 和引用数排序。
- 清空搜索,确认按 Manual 和 ImportSource 分组;输入搜索词后确认结果变为扁平列表。
预期:每行显示帧数、时长、来源、Missing、Node 引用数和问题标记,结果顺序稳定。
4.2 引用定位
- 选择无 Node 引用的 Clip,点击
Locate References。 - 选择单引用 Clip,再次定位。
- 选择多引用 Clip,再次定位并从菜单选择一个 Node。
预期:无引用时显示提示;单引用直接定位;多引用显示选择菜单。Node 在右侧只读显示,中央占位区同步显示当前定位对象。
4.3 校验定位
人为制造一个安全的校验问题,例如将 Manual Frame 的 durationMs 改为 0,然后点击 Validate。
预期:Validation 出现结构化条目;点击条目会切换到正确资源标签并显示对应对象和处理建议。
5. Manual Clip
5.1 创建 Graph 内 Manual Clip
- 点击
New Manual。 - 输入唯一 id 和 displayName,保持“外部独立 .asset”关闭。
- 创建后检查 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
- 选择被 Node 和 defaultPlayableId 引用的 Clip。
- 点击
Rename Clip ID,观察警告和受影响引用数。 - 尝试空 id、与 Clip 冲突、与 Flow 冲突和合法 id。
- 成功后执行 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
- 删除仍有关联 Imported Clip 的来源。
- 将关联 Clip 删除或复制为 Manual 后再次删除来源。
预期:有关联 Clip 时阻止并列出 Clip;允许删除时不会删除 Texture、JSON、Sprite 或 SpriteRect。
8. 导入与差异
- 在 Sources 中编辑 displayName、启用状态、Texture、JSON、pivot、切图模式和新 Clip 默认结束行为。
- 检查 internalId 只读且可复制。
- 分别执行单来源和全部来源 Preview、Refresh。
- 对自动切图来源制造 SpriteRect 变化并拒绝确认,再重新刷新并确认。
- 制造非法 JSON 后 Preview/Refresh。
预期:预览不修改资产;差异按 Added、Updated、Missing、Unchanged、Error 分组并可定位;切图变化必须确认;失败保留完整差异和错误,Graph、Clip、TextureImporter 不出现部分更新。
9. 保存、Undo 与异常恢复
- 连续执行创建、帧编辑、重命名、删除和 Source 修改。
- 逐步 Undo,再逐步 Redo。
- 点击 Save,关闭 Unity 后重开项目。
- 删除当前窗口正在编辑的测试 Graph。
预期:每个资产操作以具名事务恢复;列表、引用数和校验随 Undo/Redo 重建;保存和 Domain Reload 后数据稳定;资产删除后窗口自动清理失效 Graph 和选择,不抛出持续异常。
10. 通过标准
- 工作台所有入口、布局恢复和统一定位正常。
- Manual、Imported、外部资产和 Graph sub-asset 的所有权行为符合预期。
- id 只能正式重命名,引用迁移原子且可撤销。
- 删除不会留下悬空引用,也不会误删外部资产或导入源资源。
- Import Preview/Refresh、差异和综合校验能在同一窗口完成并准确定位。
- Console 无持续异常;重新打开项目后资产内容和引用保持稳定。