Diferença entre o back-end de script de unidade IL2CPP e Mono2x

14

O IL2CPP é um back-end de script desenvolvido pelo Unity que você pode usar como alternativa ao Mono ao criar projetos para algumas plataformas. Nota - IL2CPP está disponível apenas na construção para as seguintes plataformas:

  • Android AppleTV, iOS *, Nintendo 3DS, Nintendo Switch, Playstation 4 Playstation Vita, WebGL *, Windows Store, Xbox One

Eu tenho um projeto (unidade 5.2) que mudou para a implantação do Android. Eu tentei mudar meus scripts de volta Mono2xpara IL2CPPe está me mostrando que

O IL2CPP no Andriod é experimental e não é suportado

Portanto, minha pergunta simples é que, se ainda não há suporte, por que a opção foi incluída, qual é a diferença fundamental entre IL2CPP e Mono2x. Por que mudei para o back-end de script IL2CPP ? quais são seus prós e contras ?

Também verifiquei na unidade 5.5.2 que não há a opção IL2CPP na implantação da plataforma Windows.

Muhammad Faizan Khan
fonte

Respostas:

13

As informações são baseadas na versão 2018.2 do Unity:

Citando o manual do Unity no IL2CPP :

O IL2CPP ( Intermediate Language To C ++ ) é um back-end de script desenvolvido pelo Unity que você pode usar como alternativa ao Mono ao criar projetos para várias plataformas. O IL2CPP ( um compilador antecipado (AOT)) suporta a depuração do código gerenciado da mesma maneira que o back-end de script Mono.

Ao criar um projeto usando IL2CPP, o Unity converte o código IL de scripts e assemblies em C ++, antes de criar um arquivo binário nativo (.exe, apk, .xap, por exemplo) para a plataforma escolhida. Alguns dos usos do IL2CPP incluem aumentar o desempenho, a segurança e a compatibilidade da plataforma dos seus projetos do Unity.

Citando o tutorial do Unity em IL2CPP e Mono :

Cada back-end de script possui benefícios e desvantagens que devem influenciar sua decisão sobre qual é a escolha certa para sua situação:

IL2CPP:

  • A geração de código é bastante aprimorada em comparação com o Mono.
  • É possível depurar o código de script em C ++ de cima para baixo.
  • Você pode ativar a remoção de código do mecanismo para reduzir o tamanho do código.
  • Os tempos de construção são maiores do que com o Mono.
  • Só suporta compilação Ahead of Time (AOT).

Mono:

  • Tempos de construção mais rápidos que o IL2CPP.
  • Oferece suporte a mais bibliotecas gerenciadas devido à compilação Just In Time (JIT).
  • Suporta execução de código de tempo de execução.
  • É necessário enviar assemblies gerenciados (arquivos .dll que produzem mono ou .net).

Pontos importantes:

  • A arquitetura de destino padrão nas configurações do Android Player é armv7 e x86 com o IL2CPP e o back-end de script mono.
  • O mono não é suportado no UWP ou no iOS 11 e acima. A arquitetura padrão nas configurações do iOS Player é armv7 e arm64 com o back-end de script IL2CPP.

  • A compilação UWP oferece suporte apenas a IL2CPP e .NET. O back-end de script .NET (Descontinuado) usa o .NET da Microsoft para ativar os scripts.

Sanket Prabhu
fonte
1
Acho que sua resposta está faltando referências. Vejo que a lista IL2CPP / Mono é o mesmo texto da página de tutorial do IL2CPP & Mono do Unity , e os 2 primeiros parágrafos têm o mesmo texto que a página de manual do IL2CPP do Unity em uma ordem diferente. Edite sua resposta para incluir referências, consulte a Central de Ajuda para mais informações.
filho
3

O IL2CPP é um back-end de script desenvolvido pelo Unity que você pode usar como alternativa ao Mono ao criar projetos para algumas plataformas. Quando você escolhe criar um projeto usando IL2CPP, o Unity converte o código IL (às vezes chamado CIL - Linguagem Intermediária ou Linguagem Intermediária Comum) de scripts e assemblies em código C ++, antes de criar um arquivo binário nativo (.exe, apk, .xap, por exemplo) para a plataforma escolhida. Alguns dos usos do IL2CPP incluem aumentar o desempenho, a segurança e a compatibilidade da plataforma dos seus projetos do Unity.

Fonte

O IL2CPP é uma plataforma de execução supostamente equivalente * que é mais rápida que o mono. Nesse contexto, "experimental" coloca uma forte ênfase na palavra "supostamente" na frase anterior.

Recursos experimentais são lançados pelo mesmo motivo que o software beta é lançado publicamente: o software é bom o suficiente para uso, e os desenvolvedores desejam relatórios de bugs e outros comentários de uma ampla gama de usuários para que possam chegar ao ponto em que o software está pronto ou o lançamento real.


* O IL2CPP não funciona para códigos usados ​​exclusivamente por meio de reflexão, o que ocorrerá ao usar reflexão, serialização ou genéricos em classes que nunca são chamadas diretamente e, portanto, retiradas da compilação. A mesma restrição atualmente se aplica ao Mono em plataformas que usam restrições de compilação Antecipadas.

Pedro
fonte
Por isso, ainda não está maduro, mas estou usando o 5.2 sem experiência com o 5.5. ou 5.6. Além disso, quais são os prós e os contras de mudar no il2cpp?
Muhammad Faizan Khan
É maduro para algumas plataformas. Já existe desde antes do Unity 5 por pelo menos IOS. Eu acho que até o Android IL2CPP não está marcado como experimental nas últimas versões. Achei que o salto do Unity 4 para 5 era mais lento no Android até começar a usar o IL2CPP. É visivelmente mais rápido nos meus dispositivos de teste.
Assistente tartle
1
Como o IL2CPP está compilando com o código de máquina antecipadamente, ele possui algumas restrições adicionais relacionadas à reflexão e uso de genéricos . O compilador Just-in-Time da Mono tem as informações disponíveis para examinar e gerar o código necessário rapidamente, mas para o AoT todo o código necessário precisa ser fácil de detectar no momento da construção.
DMGregory