Communitygithub.com

king-beomsoo/unity-motion-match

Découvre et lie automatiquement les éléments uGUI existants de Unity dans l'espace-écran à partir des hiérarchies de scène et d'exécution, extrait des modèles d'interface, et reproduit fidèlement un mouvement de référence sans adaptateur spécifique au projet. Préserve la mise en page et les connexions sérialisées ; signale les éléments d'interface non pris en charge et les comportements de jeu non vérifiés. Inclut des profils de jeu hérités optionnels.

Qu'est-ce que unity-motion-match ?

Cette compétence automatisée pour Unity permet de remplacer un mouvement de référence sur des éléments uGUI existants (translation, échelle uniforme, opacité avec caméra fixe) dans une copie de projet isolée. Elle utilise un pont d'éditeur commun et des données de liaison générées, évitant les adaptateurs C# spécifiques au jeu. Le processus comprend une phase de découverte et préparation où la structure de la scène est inventoriée, les groupes d'interface sélectionnés, et des modèles de fond/repos/RGBA extraits. Une phase de correspondance et capture analyse les pixels d'une vidéo de référence (30fps, 2 secondes) pour estimer le mouvement, génère des AnimationClips natifs sur les objets existants, et vérifie la préservation de la mise en page. La compétence gère les noms en double via des identifiants d'inventaire ou des chemins uniques, et exporte des fichiers `.anim` séparés pour chaque cible. Des vérifications automatiques comparent ancres, pivots, tailles, références d'objets sérialisés, événements persistants, et la pose finale, mais ne vérifient pas les résultats spécifiques au jeu (achats, authentification, etc.). Des profils hérités optionnels existent pour des jeux connus comme 'trash-dash' et 'survivors-kit'. Fonctionne avec Python (numpy, scipy, opencv-python, Pillow) et nécessite ffmpeg pour les entrées vidéo.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Unity motion match

Utilisée pour remplacer un mouvement de référence sur de l'uGUI existant : translation, échelle uniforme et opacité avec une caméra fixe. Travaillez dans une copie de projet isolée. Le chemin par défaut auto utilise un pont d'éditeur commun et des données de liaison générées, sans adaptateurs C# spécifiques au jeu ni méthodes privées du jeu.

Découvrir et préparer

Lisez la section liaison automatique pour la sélection, les sorties et les limites, et la section périmètre de validation pour le comportement testé et les erreurs d'ajustement visuel restantes. Pour le modèle de composition, les articles originaux et un benchmark de mouvement reproductible, lisez la section méthode et preuves. La source doit compiler avec l'éditeur Unity sélectionné et contenir de l'uGUI. Python nécessite numpy, scipy, opencv-python et Pillow ; ffmpeg n'est nécessaire que pour les entrées vidéo.

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"

Ceci copie Assets/Packages/ProjectSettings sans Library, inventorie la structure Canvas/RectTransform/layout/composant de la scène, choisit une scène de démarrage, entre en mode Play normal, découvre l'interface utilisateur résultante, sélectionne les groupes visibles indépendants, et extrait les modèles de fond/repos/RGBA. Des lancements répétés établissent une base de référence stable après importation. Aucune scène n'est sauvegardée et la source n'est pas modifiée.

Inspectez selection.html, auto-report.json, auto-bindings.json et les images rest.png extraites. La sélection automatique est une suggestion structurelle, pas une connaissance de l'interface que l'utilisateur a l'intention d'animer. Utilisez --scene, --canvas, ou des sélecteurs de données --target répétés lorsque la tâche spécifie un écran/un groupe. Ceux-ci ne nécessitent aucun code d'adaptateur. Les noms en double nécessitent un ID de liaison d'inventaire ou un chemin unique.

Pour l'inventaire uniquement, utilisez scan avec les mêmes arguments source/espace de travail. Pour un aperçu de scène sérialisé sans démarrage du jeu, choisissez explicitement --execution edit ; étiquetez-le comme un aperçu, pas une vérification d'exécution. Ne substituez pas silencieusement un aperçu d'édition lorsque l'initialisation du mode Play échoue.

Unity natif peut nécessiter le chemin d'exécution approuvé de l'hôte pour les licences. Utilisez l'autorisation existante pour la copie isolée. En cas d'échec de lancement, inspectez le journal ; ne réessayez pas ou ne réparez pas silencieusement du code de jeu non lié. Un espace de travail préparé est un instantané : après avoir modifié l'interface source, créez un nouvel espace de travail.

Correspondre et capturer

Placez les enregistrements sous REFERENCE_ROOT/CASE-REVISION/, en utilisant les IDs de cas dans workspace.json, par exemple c_abcd1234-r1/reference.mp4. La capture utilise des clips de deux secondes à 30 ips, se terminant par la pose de repos originale.

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

La commande estime le mouvement à partir des pixels, écrit solutions/REVISION, échantillonne les AnimationClips natifs sur les objets existants liés, capture la sortie Unity et vérifie la préservation. Les nouveaux enregistrements nécessitent toujours une nouvelle extraction. Pour le même enregistrement, scripts/motion.py revise ajuste la vitesse, la distance spécifique à l'axe ou le décalage ; conservez une image clé de pose de repos à deux secondes lors de l'édition du timing, et réexécutez unity.py capture --workspace ... --revision ... après les modifications.

Le fitteur pixel utilise des signaux filtrés en pleine résolution et calibre les petites différences de modèle/raster à partir de l'image de repos finale de la référence. Inspectez *.fit.json pour referenceRestCalibration. Pour un graphique monochrome avec des pixels opaques, flatPaintOpacity enregistre le nombre d'images ayant eu suffisamment de patches visibles séparés pour mesurer l'opacité du groupe. Un enregistrement qui se termine intentionnellement à une autre pose/opacité n'est pas une entrée valide pour ce workflow.

Auto exporte un fichier .anim séparé relatif à la racine pour chaque cible, évitant les chemins d'animation Unity ambigus lorsque des frères ont des noms identiques. Les liaisons identifient l'objet réel de la scène/hiérarchie. Aucun objet wrapper, changement de parent, contrôle renommé ou recâblage de callback n'est introduit.

Inspectez la sortie par rapport à la référence avant de déclarer le mouvement comme correspondant. Le fait de passer les vérifications de mise en page/liaison n'est pas une preuve de similarité visuelle. Les pixels faibles, le clipping, les interfaces similaires et les opacités qui se chevauchent peuvent encore nécessiter une correction.

Pour les MP4, le fitteur vérifie l'arrière-plan stationnaire pour les différences introduites par le décodage. Pour les graphiques monochromes éligibles, il estime l'opacité à partir de la luminosité partagée par de nombreux traits. Dans *.fit.json, videoOpacity.measuredFrames compte les images avec des preuves vidéo utilisables avant restStartsAt ; les autres images conservent l'estimation antérieure. Inspectez les chevauchements et les transitions abruptes dans la relecture. Une limite numérique de pire image nécessite des valeurs d'opacité de référence connues.

Ce que les vérifications établissent

Auto compare les ancres/pivots/tailles/configuration de mise en page, les références d'objets sérialisées et les liaisons d'événements persistants, la pose finale, les destinations de raycast des boutons lorsqu'elles sont disponibles, et la restauration à deux tailles de fenêtre. Il n'invoque pas de boutons inconnus ni ne déduit si les achats, l'authentification, la navigation ou d'autres résultats spécifiques au jeu sont corrects. gameSpecificSemanticsVerified reste à faux.

Exécutez unity.py audit --workspace ... pour la base de référence des ressources/configuration. Gardez les coûts de découverte, de préparation et de remplacement séparés. Le benchmark de profil manuel précédent n'établit pas les performances pour la découverte automatique.

--profile trash-dash et --profile survivors-kit en option conservent les tests d'interaction de jeu connus antérieurs. Lisez les profils hérités uniquement lorsque ces tests sémantiques sont utiles ; ils ne sont pas nécessaires pour les autres projets uGUI.

Skills associés