Unity motion match
Use para substituição de movimentos de referência em uGUI existente: translação, escala uniforme e opacidade com câmera fixa. Trabalhe em uma cópia isolada do projeto. O caminho padrão auto usa uma ponte comum do Editor e dados de vinculação gerados, não adaptadores C# específicos do jogo ou métodos privados do jogo.
Descobrir e preparar
Leia vinculação automática para seleção, saídas e limites, e escopo de validação para comportamento testado e erros visuais restantes. Para o modelo de composição, artigos originais e um benchmark de movimento reproduzível, leia método e evidências. A fonte deve compilar com o Editor Unity selecionado e conter uGUI. Python precisa de numpy, scipy, opencv-python e Pillow; ffmpeg é necessário apenas para entrada de vídeo.
python scripts/unity.py prepare --source C:/projeto --workspace C:/motion-work --editor "C:/Program Files/Unity/Hub/Editor/6000.3.21f1/Editor/Unity.exe"
Isso copia Assets/Packages/ProjectSettings sem a Library, inventaria a estrutura de cena Canvas/RectTransform/layout/componente, escolhe uma cena de inicialização, entra no Modo Play normal, descobre a UI resultante, seleciona grupos independentes visíveis e extrai templates de fundo/rest/RGBA. Lançamentos repetidos estabelecem uma linha de base pós-importação estável. Nenhuma cena é salva e a fonte não é editada.
Inspecione selection.html, auto-report.json, auto-bindings.json e as imagens rest.png extraídas. A seleção automática é uma sugestão estrutural, não conhecimento de qual UI o usuário pretendia animar. Use --scene, --canvas ou seletores de dados --target repetidos quando a tarefa especificar uma tela/grupo. Eles não precisam de código adaptador. Nomes duplicados exigem um ID de vinculação de inventário ou um caminho único.
Apenas para inventário, use scan com os mesmos argumentos de origem/espaço de trabalho. Para uma prévia de cena serializada sem inicialização do jogo, escolha explicitamente --execution edit; rotule como prévia, não verificação de tempo de execução. Não substitua silenciosamente uma prévia de edição quando a inicialização do Modo Play falhar.
O Unity nativo pode exigir o caminho de execução aprovado do host para licenciamento. Use autorização existente para a cópia isolada. Em caso de falha no lançamento, inspecione o log; não repita ou repare código de jogo não relacionado silenciosamente. Um espaço de trabalho preparado é um instantâneo: após alterar a UI de origem, crie um novo espaço de trabalho.
Combinar e capturar
Coloque as gravações sob REFERENCE_ROOT/CASE-REVISION/, usando IDs de caso em workspace.json, por exemplo c_abcd1234-r1/reference.mp4. A captura usa clipes de dois segundos a 30fps, terminando na pose de descanso original.
python scripts/unity.py match --workspace C:/motion-work --reference C:/referencias --revision r1
O comando estima o movimento a partir de pixels, escreve solutions/REVISION, amostra AnimationClips nativos em objetos existentes vinculados, captura a saída do Unity e verifica a preservação. Novas gravações sempre exigem reextração. Para a mesma gravação, scripts/motion.py revise ajusta velocidade, distância específica do eixo ou escalonamento; mantenha uma chave de pose de descanso em dois segundos ao editar o tempo e execute unity.py capture --workspace ... --revision ... novamente após as edições.
O ajustador de pixels usa sinais filtrados em resolução total e calibra pequenas diferenças de template/raster a partir do quadro de descanso final da referência. Inspecione *.fit.json para referenceRestCalibration. Para um gráfico de cor única com pixels opacos, flatPaintOpacity registra quantos quadros tiveram patches visíveis separados suficientes para medir a opacidade do grupo. Uma gravação que termina intencionalmente em outra pose/opacidade não é uma entrada válida para este fluxo de trabalho.
Exporta automaticamente um .anim separado relativo à raiz para cada alvo, evitando caminhos de animação ambíguos do Unity quando irmãos têm nomes idênticos. As vinculações identificam o objeto real da cena/hierarquia. Nenhum objeto wrapper, reparentalização, controles renomeados ou recabeamento de callbacks são introduzidos.
Inspecione a saída em relação à referência antes de declarar o movimento como correspondente. Passar nas verificações de layout/vinculação não é prova de similaridade visual. Pixels fracos, recorte, UI semelhante e opacidade sobreposta ainda podem exigir correção.
Para MP4s, o ajustador verifica o fundo estacionário em busca de diferenças introduzidas pela decodificação. Em gráficos de cor única elegíveis, estima a opacidade a partir do brilho compartilhado por muitos traços. Em *.fit.json, videoOpacity.measuredFrames conta quadros com evidência de vídeo utilizável antes de restStartsAt; outros quadros mantêm a estimativa anterior. Inspecione sobreposições e transições abruptas na reprodução. Um limite de pior quadro numérico requer valores de opacidade de referência conhecidos.
O que as verificações estabelecem
Auto compara âncoras/pivôs/tamanhos/configuração de layout, referências de objeto serializadas e vinculações de eventos persistentes, pose final, destinos de raycast de botões quando disponíveis e restauração em dois tamanhos de viewport. Não invoca botões desconhecidos nem infere se compras, autenticação, navegação ou outros resultados específicos do jogo estão corretos. gameSpecificSemanticsVerified permanece falso.
Execute unity.py audit --workspace ... para a linha de base do ativo/configuração. Mantenha os custos de descoberta, preparação e substituição separados. O benchmark de perfil manual anterior não estabelece desempenho para descoberta automática.
Opcional --profile trash-dash e --profile survivors-kit mantêm testes de interação de jogos conhecidos anteriores. Leia perfis legados apenas quando esses testes semânticos forem úteis; eles não são necessários para outros projetos uGUI.