Version: 2020.1
Building a project using IL2CPP
Windows Runtime support

Compiler options

When using the IL2CPPA Unity-developed scripting back-end which you can use as an alternative to Mono when building projects for some platforms. More info
See in Glossary
scripting backendA framework that powers scripting in Unity. Unity supports three different scripting backends depending on target platform: Mono, .NET and IL2CPP. Universal Windows Platform, however, supports only two: .NET and IL2CPP. More info
See in Glossary
, it is possible to control how il2cpp.exe generates C++ code. Specifically, C# attributes can be used to enable or disable the following runtime checks listed below.

Option Description Default
Null checks If this option is enabled, C++ code generated by IL2CPP will contain null checks and throw managed NullReferenceException exceptions as necessary. If this option is disabled, the null checks are not be emitted into the generated C++ code. For some projects, disabling this option may improve runtime performance.
However, any access to null values in the generated code will not be protected, and may lead to incorrect behavior. Usually the game will crash soon after the null value is dereferenced, but we cannot guarantee this. Disable this option with caution.
Enabled
Array bounds checks If this option is enabled, C++ code generated by IL2CPP will contain array bounds checks and throw managed IndexOutOfRangeException exceptions as necessary. If this option is disabled, the array bounds checks will not be emitted into the generated C++ code.
For some projects, disabling this option may improve runtime performance. However, any access to an array with invalid indices in the generated code will not be protected, and may lead to incorrect behavior, including reading from or writing to arbitrary memory locations. In most cases, these memory accesses will occur without any immediate side effects, and may silently corrupt the state of the game. Disable this option with extreme caution.
Enabled
Divide by zero checks If this option is enabled, C++ code generated by IL2CPP will contain divide by zero checks for integer division and throw managed DivideByZeroException exceptions as necessary. If this option is disabled, the divide by zero checks on integer division will not be emitted into the generated C++ code. For most projects this option should be disabled. Enable it only if divide by zero checks are required, as these checks have a runtime cost. Disable

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 on your computer. (Data\il2cpp on Windows, Contents/Frameworks/il2cpp on OS X). Copy this source file into the Assets folder in your project.

Now use the attribute as in the example below.

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

You can apply Il2CppSetOptions attribute to types, methods, and properties. Unity uses the attribute from the most local scope.

[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();
        }
    }
}
Building a project using IL2CPP
Windows Runtime support