Version: 5.5
Editor Test Runner
EventSystem (Sistema de Eventos)

IL2CPP

El scripting backend IL2CPP convierte código IL de script y assemblies en un proyecto de Unity a código C++ el cual es luego compilado utilizando compiladores nativos de plataforma. Para la mayoría de parte, el scripting backend no debería importar. Sin embargo, IL2CPP si proporciona unas pocas opciones útiles que pueden ser controladas.

Opciones de Compilador

Cuando utilice el scripting backend IL2CPP, es posible controlar cómo il2cpp.exe genera código C++. Específicamente, atributos C# se pueden utilizar para habilitar o deshabilitar las siguientes revisiones de runtime:

Option Description Default
Null checks Si esta opción está habilitada, el código C++ generado por IL2Cpp contendrá revisiones null y lanzará excepciones NullReferenceException como sea necesario. Si esta opción es desactivada, las revisiones por null no serán emitidas al código C++ generado. Para algunos proyectos, desactivar esta opción podría mejorar el rendimiento runtime. No obstante, cualquier acceso a valores null en el código generado no serán protegidos, y podría llevar a un comportamiento incorrecto. Usualmente, el juego fallará pronto después de que el desreferenciado, pero no podemos garantizar esto. Desactivar esta opción con cuidado. Habilitado
Array bounds checks Si esta opción es habilitada, el código C++ generado por IL2CPP contendrá revisiones de limite del arreglo y lanzará excepciones IndexOutOfRangeException manejadas como sea necesario. Si esta opción no está habilitada, las revisiones de limite del arreglo no serán emitidas al código C++ generado. Para algunos proyecto, desactivar esta opción podría mejorar rendimiento en runtime. No obstante, cualquier acceso a un arreglo con indices inválidos podría llevar a un comportamiento incorrecto, incluyendo leer de o escribir en ubicaciones de memoria arbitrarias. En la mayoría de casos, estos accesos de memoria ocurrirán sin ningún efecto secundario, y podría corromper en silencio el estado del juego. Desactive esta opción con cuidado. Habilitado
Divide by zero checks Si esta opción es habilitada, el código C++ generado por IL2CPP contendrá revisiones de divisiones de enteros dividiendo cero y lanzará excepciones DivideByZeroException manejadas como sea necesario. Si esta opción está des-habilitada, las revisiones por divisiones a cero en divisiones de enteros no será emitido al código C++ generado. Para la mayoría de proyectos esta opción debería estar desactivada. Habilite solamente si las revisiones por divisiones a cero se requieren, ya que estas revisiones tienen un costo en tiempo de ejecución. Deshabilitar

The runtime checks can be enabled or disabled in C# code using the Il2CppSetOptions attribute. To use this attribute, find the Il2CppSetOptionsAttribute.cs source file in the IL2CPP directory in the Unity Editor installation (Data\il2cpp on Windows, Contents/Frameworks/il2cpp on OS X). Copy this source file into the Assets folder in your project. Then the attribute can be used like this:

[Il2CppSetOption(Option.NullChecks, false)]
public static string MethodWithNullChecksDisabled()
{
    var tmp = new object();
    return tmp.ToString();
}

El atributo Il2CppSetOptions se puede aplicar a tipos, métodos, y propiedades. El atributo del scope más local será utilizado.

[Il2CppSetOption(Option.NullChecks, false)]
public class TypeWithNullChecksDisabled
{
    public static string AnyMethod()
    {
        // Null checks will be disabled in this method.
        var tmp = new object();
        return tmp.ToString();
    }

    [Il2CppSetOption(Option.NullChecks, true)]
    public static string MethodWithNullChecksEnabled()
    {
        // Null checks will be enabled in this method.
        var tmp = new object();
        return tmp.ToString();
    }
}
public class SomeType
{
    [Il2CppSetOption(Option.NullChecks, false)]
    public string PropertyWithNullChecksDisabled
    {
        get
        {
            // Null checks will be disabled here.
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            // Null checks will be disabled here.
            value.ToString();
        }
    }

    public string PropertyWithNullChecksDisabledOnGetterOnly
    {
        [Il2CppSetOption(Option.NullChecks, false)]
        get
        {
            // Null checks will be disabled here.
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            // Null checks will be enabled here.
            value.ToString();
        }
    }
}
Editor Test Runner
EventSystem (Sistema de Eventos)