Communitygithub.com

Unity 动作匹配

自动发现并绑定场景和运行时层次结构中的现有屏幕空间 Unity uGUI,提取 UI 模板,并重复匹配参考动作,无需特定项目适配器。保留布局和序列化连接;报告不支持的 UI 和未验证的游戏行为。包含可选的旧版游戏配置文件。

Unity 动作匹配 是什么?

Unity 动作匹配(Unity motion match)是一个 AI 辅助技能,旨在自动化替换现有 Unity uGUI 中的参考动画,包括平移、统一缩放和透明度变化,且使用固定摄像机。它在一个隔离的项目副本中工作,默认的 `auto` 路径使用一个通用的编辑器桥接和生成的绑定数据,而不是特定游戏的 C# 适配器或私有游戏方法。该技能支持 Unity 编辑器(通过命令行 `unity.py` 脚本)和 Python 环境(依赖 numpy、scipy、opencv-python 和 Pillow)。工作流程包括准备阶段(通过 Play Mode 自动发现 UI 并提取背景/RGBA 模板)、匹配阶段(从参考视频中估计运动并生成 `.anim` 文件)以及验证阶段(检查布局、绑定和最终姿势)。它不会修改原始项目,并报告潜在的视觉差异或不受支持的 UI 元素,非常适合游戏 UI 的批量测试或自动化回归测试。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/king-beomsoo/unity-motion-match/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Unity 动作匹配 是做什么的?

用于替换现有 uGUI 上的参考动作:平移、统一缩放和透明度,并带有固定摄像机。在隔离的项目副本中工作。默认的 auto 路径使用一个通用的编辑器桥接和生成的绑定数据,而不是特定游戏的 C# 适配器或私有游戏方法。

发现与准备

阅读自动绑定了解选择、输出和限制,以及验证范围了解经过测试的行为和剩余的视觉拟合错误。关于合成模型、原始论文和可重复的动作基准,请阅读方法与证据。源代码必须使用选定的 Unity 编辑器编译,并包含 uGUI。Python 需要 numpy、scipy、opencv-python 和 Pillow;ffmpeg 仅在需要视频输入时需要。

python scripts/unity.py prepare --source C:/project --workspace C:/motion-work --editor "C:/Program Files/Unity/Hub/Editor/6000.3.21f1/Editor/Unity.exe"

这会复制 Assets/Packages/ProjectSettings(不包含 Library),盘点场景中的 Canvas/RectTransform/布局/组件结构,选择一个启动场景,进入普通 Play Mode,发现产生的 UI,选择独立的可见组,并提取背景/静态/RGBA 模板。重复启动可以建立稳定的后导入基线。不会保存场景,也不会编辑源项目。

检查 selection.html、auto-report.json、auto-bindings.json 以及提取的 rest.png 图像。自动选择是一个结构建议,而不是对用户打算制作动画的 UI 的了解。当任务指定某个屏幕/组时,使用 --scene、--canvas 或重复的 --target 数据选择器。这些不需要适配器代码。重复名称需要清单绑定 ID 或唯一路径。

如果只需要清单,使用相同的源/工作区参数运行 scan。如果需要序列化场景预览而不启动游戏,请明确选择 --execution edit;将其标记为预览,而不是运行时验证。当 Play Mode 初始化失败时,不要静默地用编辑预览替换。

原生 Unity 可能需要宿主批准的授权执行路径。对隔离副本使用现有授权。如果启动失败,检查日志;不要重复重试或静默修复无关的游戏代码。准备好的工作区是一个快照:更改源 UI 后,创建一个新的工作区。

匹配与捕获

将录制文件放在 REFERENCE_ROOT/CASE-REVISION/ 下,使用 workspace.json 中的案例 ID,例如 c_abcd1234-r1/reference.mp4。捕获使用两秒片段,30fps,在原始静止姿势处结束。

python scripts/unity.py match --workspace C:/motion-work --reference C:/references --revision r1

该命令从像素估计运动,写入 solutions/REVISION,在绑定的现有对象上采样原生 AnimationClip,捕获 Unity 输出,并检查保留性。新的录制总是需要重新提取。对于同一录制,scripts/motion.py revise 调整速度、特定轴的距离或交错;编辑时序时在 2 秒处保留一个静止姿势关键帧,并在编辑后重新运行 unity.py capture --workspace ... --revision ...。

像素拟合器使用全分辨率滤波信号,并校准参考最终静止帧中的微小模板/光栅差异。检查 *.fit.json 中的 referenceRestCalibration。对于有不透明像素的单色图形,flatPaintOpacity 记录有多少帧有足够多的独立可见块来测量组不透明度。故意在另一个姿势/不透明度结束的录制不适用于此工作流。

自动为每个目标导出一个单独的、相对于根对象的 .anim 文件,避免当兄弟对象共享相同名称时出现歧义的 Unity 动画路径。绑定标识实际的场景/层次结构对象。不会引入包装对象、重新父级、重命名控件或回调线路。

在将动作称为匹配之前,比较输出与参考。通过布局/绑定检查并不能证明视觉相似性。微弱的像素、裁剪、相似的 UI 和重叠的不透明度仍然可能需要修正。

对于 MP4,拟合器检查静止背景中由解码引入的差异。对于符合条件的单色图形,它从许多笔触共享的亮度估计不透明度。在 *.fit.json 中,videoOpacity.measuredFrames 统计在 restStartsAt 之前具有可用视频证据的帧数;其他帧保留较早的估计。检查重放中的重叠和突然过渡。数值最差帧边界需要已知参考不透明度值。

检查建立的内容

自动比较锚点/基准点/大小/布局配置、序列化对象引用和持久事件绑定、最终姿势、按钮射线投射目标(如果可用),以及两个视口大小下的恢复。它不会调用未知按钮或推断购买、身份验证、导航或其他特定游戏结果是否正确。gameSpecificSemanticsVerified 保持为 false。

运行 unity.py audit --workspace ... 获取资产/配置基线。保持发现、准备和替换成本分开。之前的配置文件基准并不说明自动发现的性能。

可选的 --profile trash-dash 和 --profile survivors-kit 保留早期已知游戏交互测试。仅当这些语义测试有用时才阅读旧版配置文件;其他 uGUI 项目不需要它们。

相关技能