Communitygithub.com

Unity Motion Match

Descubre y vincula automáticamente uGUI de Unity en espacio de pantalla desde jerarquías de escena y runtime, extrae plantillas de UI y empareja movimientos de referencia repetidamente sin necesidad de adaptadores específicos del proyecto. Conserva el diseño y las conexiones serializadas; reporta UI no compatible y comportamientos no verificados. Incluye perfiles opcionales para juegos heredados.

¿Qué es Unity Motion Match?

Esta habilidad permite a un agente de IA reemplazar movimientos de referencia (traducción, escala uniforme y opacidad) en interfaces de usuario uGUI de Unity, trabajando sobre una copia aislada del proyecto. Utiliza un puente de Editor y datos de enlace generados automáticamente, evitando la necesidad de adaptadores C# específicos del juego o métodos privados. Es compatible con los agentes Claude Code, Cursor y similares que ejecuten scripts Python en un entorno con numpy, scipy, opencv-python y Pillow. El proceso incluye la fase de descubrimiento (preparación) donde se escanea la escena, se extraen plantillas de UI y se establece una línea base estable, y la fase de emparejamiento (match) donde se estima el movimiento a partir de píxeles de grabaciones de video y se generan AnimationClips nativos de Unity sobre los objetos vinculados existentes. No modifica el código fuente original ni introduce objetos envoltorio o cambios en callbacks, y proporciona informes detallados (JSON e HTML) para inspeccionar los enlaces y resultados.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/king-beomsoo/unity-motion-match/tree/HEAD

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Unity Motion Match?

Úselo para reemplazar movimientos de referencia en uGUI existente: traslación, escala uniforme y opacidad con una cámara fija. Trabaje en una copia aislada del proyecto. La ruta predeterminada auto utiliza un puente común del Editor y datos de enlace generados, no adaptadores C# específicos del juego ni métodos privados del juego.

Descubrir y preparar

Lea enlace automático para la selección, salidas y límites, y alcance de validación para el comportamiento probado y los errores restantes de ajuste visual. Para el modelo de composición, documentos originales y un benchmark reproducible de movimiento, lea método y evidencia. La fuente debe compilarse con el Editor de Unity seleccionado y contener uGUI. Python necesita numpy, scipy, opencv-python y Pillow; ffmpeg solo es necesario para entrada de video.

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"

Esto copia Assets/Packages/ProjectSettings sin Library, inventaria la estructura de escena Canvas/RectTransform/layout/component, elige una escena de inicio, entra en el modo Play normal, descubre la UI resultante, selecciona grupos visibles independientes y extrae plantillas de fondo/descanso/RGBA. Los lanzamientos repetidos establecen una línea base estable posterior a la importación. No se guarda ninguna escena ni se edita la fuente.

Inspeccione selection.html, auto-report.json, auto-bindings.json y las imágenes rest.png extraídas. La selección automática es una sugerencia estructural, no un conocimiento de qué UI el usuario pretendía animar. Use --scene, --canvas o selectores de datos --target repetidos cuando la tarea especifique una pantalla/grupo. Estos no necesitan código de adaptador. Los nombres duplicados requieren un ID de enlace de inventario o una ruta única.

Para solo inventario, use scan con los mismos argumentos de fuente/espacio de trabajo. Para una vista previa de escena serializada sin iniciar el juego, elija explícitamente --execution edit; etiquételo como vista previa, no como verificación en tiempo de ejecución. No sustituya silenciosamente una vista previa de edición cuando la inicialización del modo Play falle.

Unity nativo puede requerir la ruta de ejecución aprobada del host para la licencia. Use la autorización existente para la copia aislada. En un lanzamiento fallido, inspeccione el registro; no reintente repetidamente ni repare código de juego no relacionado silenciosamente. Un espacio de trabajo preparado es una instantánea: después de cambiar la UI de origen, cree un espacio de trabajo nuevo.

Emparejar y capturar

Coloque las grabaciones en REFERENCE_ROOT/CASE-REVISION/, usando IDs de caso en workspace.json, por ejemplo c_abcd1234-r1/reference.mp4. La captura utiliza clips de dos segundos a 30fps, terminando en la pose de descanso original.

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

El comando estima el movimiento a partir de píxeles, escribe solutions/REVISION, muestrea AnimationClips nativos en objetos existentes vinculados, captura la salida de Unity y verifica la preservación. Las nuevas grabaciones siempre requieren reextracción. Para la misma grabación, scripts/motion.py revise ajusta la velocidad, la distancia específica del eje o el escalonamiento; mantenga una clave de pose de descanso a los dos segundos al editar la sincronización, y vuelva a ejecutar unity.py capture --workspace ... --revision ... después de las ediciones.

El ajustador de píxeles utiliza señales filtradas de resolución completa y calibra pequeñas diferencias de plantilla/ráster a partir del fotograma de descanso final de la referencia. Inspeccione *.fit.json para referenceRestCalibration. Para un gráfico de un solo color con píxeles opacos, flatPaintOpacity registra cuántos fotogramas tuvieron suficientes parches visibles separados para medir la opacidad del grupo. Una grabación que termine intencionalmente en otra pose/opacidad no es una entrada válida para este flujo de trabajo.

Exporta automáticamente un .anim separado relativo a la raíz para cada objetivo, evitando rutas de animación ambiguas de Unity cuando los hermanos tienen nombres idénticos. Los enlaces identifican el objeto real de la escena/jerarquía. No se introducen objetos envoltorio, cambios de padre, controles renombrados ni reenrutamiento de callbacks.

Inspeccione la salida con respecto a la referencia antes de declarar el movimiento como emparejado. Pasar las verificaciones de diseño/enlace no es prueba de similitud visual. Los píxeles tenues, el recorte, la UI similar y la opacidad superpuesta aún pueden requerir corrección.

Para MP4, el ajustador verifica el fondo estacionario en busca de diferencias introducidas por la decodificación. En gráficos elegibles de un solo color, estima la opacidad a partir del brillo compartido por muchos trazos. En *.fit.json, videoOpacity.measuredFrames cuenta los fotogramas con evidencia de video utilizable antes de restStartsAt; otros fotogramas retienen la estimación anterior. Inspeccione las superposiciones y las transiciones abruptas en la reproducción. Un límite numérico del peor fotograma requiere valores de opacidad de referencia conocidos.

Lo que establecen las verificaciones

Auto compara anclas/pivots/tamaños/configuración de diseño, referencias de objetos serializados y enlaces de eventos persistentes, pose final, destinos de raycast de botones cuando están disponibles y restauración en dos tamaños de ventana. No invoca botones desconocidos ni infiere si las compras, autenticación, navegación u otros resultados específicos del juego son correctos. gameSpecificSemanticsVerified permanece falso.

Ejecute unity.py audit --workspace ... para la línea base de activos/configuración. Mantenga separados los costos de descubrimiento, preparación y reemplazo. El benchmark anterior de perfil manual no establece el rendimiento para el descubrimiento automático.

Opcionalmente, --profile trash-dash y --profile survivors-kit conservan pruebas de interacción de juegos conocidos anteriores. Lea perfiles heredados solo cuando esas pruebas semánticas sean útiles; no son necesarias para otros proyectos uGUI.

Skills relacionados