Diferencia entre la unidad de secuencias de comandos backend IL2CPP y Mono2x

14

IL2CPP es un back-end de secuencias de comandos desarrollado por Unity que puede usar como una alternativa a Mono al crear proyectos para algunas plataformas. Nota: IL2CPP solo está disponible al compilar para las siguientes plataformas:

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

Tengo un proyecto (unidad 5.2) que se ha cambiado para la implementación de Android. Traté de cambiar mi scripting respaldo de Mono2xa IL2CPPy su mostrándome que

IL2CPP en Andriod es experimental y no es compatible

Entonces, mi simple pregunta es que si aún no es compatible, ¿por qué se ha incluido la opción? ¿Cuál es la diferencia fundamental entre IL2CPP y Mono2x? ¿Por qué me cambié al backend de secuencias de comandos IL2CPP ? ¿Cuáles son sus pros y sus contras ?

También he comprobado en unity 5.5.2 que no hay una opción IL2CPP en la implementación de la plataforma de Windows.

Muhammad Faizan Khan
fuente

Respuestas:

13

La información se basa en la versión 2018.2 de Unity:

Citando el manual de Unity en IL2CPP :

IL2CPP ( Intermediate Language To C ++ ) es un backend de secuencias de comandos desarrollado por Unity que puede usar como alternativa a Mono al crear proyectos para varias plataformas. IL2CPP ( un compilador anticipado (AOT)) admite la depuración de código administrado de la misma manera que el backend de secuencias de comandos Mono.

Al construir un proyecto usando IL2CPP, Unity convierte el código IL de scripts y ensamblajes a C ++, antes de crear un archivo binario nativo (.exe, apk, .xap, por ejemplo) para la plataforma elegida. Algunos de los usos de IL2CPP incluyen aumentar el rendimiento, la seguridad y la compatibilidad de plataforma de sus proyectos de Unity.

Citando el tutorial de Unity sobre IL2CPP y Mono :

Cada backend de secuencias de comandos tiene beneficios y desventajas que deberían influir en su decisión sobre cuál es la opción correcta para su situación:

IL2CPP:

  • La generación de código ha mejorado mucho en comparación con Mono.
  • Es posible depurar el código del script en C ++ de arriba a abajo.
  • Puede habilitar la eliminación de código del motor para reducir el tamaño del código.
  • Los tiempos de construcción son más largos que con Mono.
  • Solo es compatible con la compilación Ahead of Time (AOT).

Mono:

  • Tiempos de compilación más rápidos que IL2CPP.
  • Admite más bibliotecas administradas debido a la compilación Just In Time (JIT).
  • Admite la ejecución de código de tiempo de ejecución.
  • Debe enviar ensamblados administrados (archivos .dll que producen mono o .net).

Puntos importantes:

  • La arquitectura de destino predeterminada en la configuración del reproductor de Android es armv7 y x86 con IL2CPP y Mono Scripting Backend.
  • Mono no es compatible con UWP o iOS 11 y superior. La arquitectura predeterminada en la configuración del reproductor iOS es armv7 y arm64 con el backend de secuencia de comandos IL2CPP.

  • La compilación de UWP solo admite IL2CPP y .NET. El backend de scripts de .NET (en desuso) usa el .NET de Microsoft para potenciar los scripts.

Sanket Prabhu
fuente
1
Creo que a tu respuesta le faltan referencias. Veo que la lista IL2CPP / Mono es el mismo texto que la página del tutorial IL2CPP y Mono de Unity , y los primeros 2 párrafos tienen el mismo texto que la página del manual IL2CPP de Unity en un orden diferente. Edite su respuesta para incluir referencias, consulte el centro de ayuda para obtener más información.
sonny
3

IL2CPP es un back-end de secuencias de comandos desarrollado por Unity que puede usar como una alternativa a Mono al crear proyectos para algunas plataformas. Cuando elige construir un proyecto usando IL2CPP, Unity convierte el código IL (a veces llamado CIL - Lenguaje intermedio o lenguaje intermedio común) de scripts y ensamblajes en código C ++, antes de crear un archivo binario nativo (.exe, apk, .xap, para ejemplo) para su plataforma elegida. Algunos de los usos de IL2CPP incluyen aumentar el rendimiento, la seguridad y la compatibilidad de plataforma de sus proyectos de Unity.

Fuente

IL2CPP es una plataforma de ejecución supuestamente equivalente * que es más rápida que mono. En este contexto, "experimental" pone un fuerte énfasis en la palabra "supuestamente" en la oración anterior.

Las funciones experimentales se lanzan por la misma razón por la que el software beta se lanza públicamente: el software es lo suficientemente bueno como para usarlo, y los desarrolladores quieren informes de errores y otros comentarios de una amplia gama de usuarios para que puedan llegar al punto en que el software esté listo o El lanzamiento real.


* IL2CPP no funciona para el código que se usa únicamente a través de la reflexión, lo que sucederá al usar la reflexión, la serialización o los genéricos en clases que nunca se llaman directamente y, por lo tanto, se eliminan de la compilación. La misma restricción se aplica actualmente a Mono en plataformas que usan restricciones de compilación anticipadas.

Peter
fuente
Así que todavía no está maduro todavía estoy usando 5.2 sin experiencia sobre 5.5. o 5.6. además, ¿cuáles son las ventajas y desventajas de cambiar en il2cpp?
Muhammad Faizan Khan
Es maduro para algunas plataformas. Ha existido desde antes de Unity 5 durante al menos IOS. Creo que incluso el Android IL2CPP no está marcado como experimental en las últimas versiones. Encontré que el salto de Unity 4 a 5 es más lento en Android hasta que comencé a usar el IL2CPP. Es notablemente más rápido en mis dispositivos de prueba.
Tartle Wizard
1
Dado que IL2CPP está compilando el código de máquina con anticipación, tiene algunas restricciones adicionales con respecto a la reflexión y el uso de genéricos . El compilador Just-in-Time de Mono tiene la información disponible para introspectar y generar el código necesario sobre la marcha, pero para AoT todo el código necesario debe ser fácil de detectar en el momento de la compilación.
DMGregory