Ferramenta de conversão UnityScript para C#

Fala galera! Saca só essa ferramenta de conversão de UnityScript para C#, perfeito para quem tem projetos antigos em UnityScript.

Desde agosto de 2017 foi iniciado um processo de descontinuação do UnityScript (uma linguagem de script semelhante a JavaScript), de lá para cá eles vem trabalhando em uma ferramenta de conversão dessa linguagem para o C#, é tanto que logo após isso no menu foi mudado a opção para criar novos scripts UnityScript para Legacy.

Com o Unity 2018.2, foi removido completamente a opção de criar novos scripts do UnityScript. A empresa acredita que a ferramenta de conversão é um recurso completo e estável o suficiente para ajudar qualquer um quer ainda tenha projetos usando o UnityScript.

Bem antes de iniciar o processo de conversão, é sugerido que você certifique-se de que seu projeto seja compilado corretamente no Unity 2018.1, que todos seus testes estejam passando e que você entenda que tem algumas limitações como:

  • Alguns comentários podem não ser preservados ou serem perdidos.
  • Código guardado (#if…)
    • O analisador UnityScript simplesmente ignora o código protegido quando a condição é valida como false, não deixando rastros do código original quando estamos visitando o AST gerado. A alternativa por enquanto é executar a ferramenta varias vezes para garantir que todo o código guardado seja processado. Cada vez que a ferramenta é executada, o usuário é obrigado a mesclar o código gerado manualmente.
  • A formatação não é preservada
  • Os métodos UnityScript.Lang.Array (aka Array ) não são totalmente suportados. Nós convertemos esse tipo para objeto [] (isso significa que se seus scripts dependerem de tais métodos, você precisará substituir as declarações de variáveis ​​/ instanciações por algum outro tipo (como List , Stack , etc) e corrigir o código.
  • Inferência de tipo em declarações de função anônimas são imprecisas em alguns cenários e podem inferir o tipo de parâmetro / retorno errado.
  • O escopo de variável local às vezes fica confuso devido à maneira como o escopo do UnityScript funciona.
  • Tipos com hífens no nome (como This-Is-Invalid ) são convertidos como no estado em que se encontram, mas não são válidos em C #
  • Os valores de retorno ausentes não são injetados automaticamente (isto é, em um método não vazio , um retorno; a instrução causará um erro de compilação no código convertido)
  • A conversão automática do objeto para int / long / float / bool etc não é suportada ( embora o suporte limitado para int -> bool conversion em expressões condicionais esteja em vigor).
  • para (init; condition; increment) é convertido em while
  • Métodos com o mesmo nome da classe declarante (inválido em C#) são convertidos como estão
  • Operandos inválidos como operadores (que sempre produzem nulo nos EUA) são considerados erros pelo compilador C#.
  • Comparação de igualdade contra nulo usada como expressões de instrução gera erros em C# (por exemplo: foo == null; )
  • O código que altera a variável de loop foreach (que não é permitido em C #) é convertido como está , o que significa que o código resultante não será compilado corretamente.
  • Recursos não suportados
    • Definição de propriedade / evento
    • Macros
    • Literais
      • Expressões regulares
    • Manipulação de exceção

Observe que qualquer construção de idioma não suportado (também conhecido como tipo de nó AST) injetará um comentário na origem convertida, incluindo o trecho de código que não é suportado e as informações de origem / linha relacionadas.

É recomendado executar a ferramenta de conversão através do menu Tools/Convert UnityScript to C#. Se você precisar de mais controle sobre os parâmetros usados durante a conversão, você pode executar a conversão da linha de comando, mas tenha em mente que a flexibilidade extra vem com complexidade extra.

Para resumir, o processo básico é assim:

  1. Faça backup do seu projeto
  2. Projeto aberto em 2018.1
  3. Aceite a oferta do API Updater (se houver) e corrija os erros restantes
  4. Certifique-se de que o player seja criado com sucesso em cada plataforma de destino
  5. Certifique-se de que todos os testes relacionados estão passando (também, execute o projeto em dispositivos reais)
  6. Instale o Pacote de Integração do Editor mais recente (consulte aqui as instruções sobre como instalar pacotes de ativos no Editor).
  7. Limpe o console do editor
  8. Execute a ferramenta de conversão.
  9. Corrija quaisquer problemas restantes (executando testes relacionados)

Observe que, se seu projeto tiver várias plataformas, talvez seja necessário repetir a etapa 8 para cada plataforma de destino, selecionando a plataforma antes de executar a ferramenta de conversão e mesclar manualmente o código convertido, envolvendo o código com o código condicional . Esta é uma limitação da ferramenta. Nesse caso, você provavelmente usará um VCS para restaurar o estado do projeto após cada conversão.

A etapa 9 pode ou não ser necessária (depende de quais APIs seu projeto usa).

Como a ferramenta é de código aberto, você está convidado a baixar sua fonte e dar uma olhada! Sinta-se livre para contribuir com quaisquer correções / melhorias.

Se, por qualquer motivo, esta ferramenta não atender às suas necessidades, você poderá verificar outros conversores disponíveis na Asset Store .

Então é isso, caso tenha alguma dúvida em relação a esse post não hesite em deixar sua pergunta ou comentário aqui abaixo, ok?

Um forte abraço e até a próxima!