使用 IL2CPP 脚本后端时,可以控制 il2cpp.exe 如何生成 C++ 代码。具体来说,可使用 C# 属性启用或禁用下面列出的运行时检查。
| 选项 | 描述 | 默认值 | 
|---|---|---|
| Null checks | 如果启用此选项,则 IL2CPP 生成的 C++ 代码将包含 null 检查,并根据需要抛出托管的 NullReferenceException 异常。如果禁用此选项,则不会将 null 检查放入生成的 C++ 代码中。对于某些项目,禁用此选项可能会提高运行时性能。 但是,在生成的代码中对 null 值的任何访问都不会受到保护,并可能会导致不正确的行为。_通常情况下_,游戏将在取消引用 null 值后很快崩溃,但我们无法保证这一点。请谨慎禁用此选项。 | Enabled | 
| Array bounds checks | 如果启用此选项,则 IL2CPP 生成的 C++ 代码将包含数组边界检查,并根据需要抛出托管的 IndexOutOfRangeException 异常。如果禁用此选项,则不会将数组边界检查放入生成的 C++ 代码中。 对于某些项目,禁用此选项可能会提高运行时性能。但是,在生成的代码中对具有无效索引的数组的任何访问都不会受到保护,并可能导致不正确的行为,包括读取或写入任意内存位置。在大多数情况下,这些内存访问在发生时不会表现出任何直接副作用,可能会悄无声息破坏游戏状态。禁用此选项要极度谨慎。 | Enabled | 
| Divide by zero checks | 如果启用此选项,则 IL2CPP 生成的 C++ 代码将包含整数除法的除以零检查,并根据需要抛出托管的 DivideByZeroException 异常。如果禁用此选项,则不会将整数除法的除以零检查放入生成的 C++ 代码中。对于大多数项目,应禁用此选项。仅在需要进行除以零检查时才启用,因为这些检查具有运行时成本。 | Disable | 
可使用 Il2CppSetOptions 属性在 C# 代码中启用或禁用运行时检查。要使用此属性,请在计算机上的 Unity Editor 安装中的 IL2CPP 目录中找到 Il2CppSetOptionsAttribute.cs 源文件。(在 Windows 上位于 Data\il2cpp,在 OS X 上位于 Contents/Frameworks/il2cpp)。将此源文件复制到项目中的 Assets 文件夹中。
现在按照以下示例中所示使用该属性。
[Il2CppSetOption(Option.NullChecks, false)]
public static string MethodWithNullChecksDisabled()
{
    var tmp = new object();
    return tmp.ToString();
}
可将 Il2CppSetOptions 属性应用于类型、方法和属性。Unity 在最局部的作用域内使用该属性。
[Il2CppSetOption(Option.NullChecks, false)]
public class TypeWithNullChecksDisabled
{
    public static string AnyMethod()
    {
        // 在此方法中将禁用 null 检查。
        var tmp = new object();
        return tmp.ToString();
    }
    [Il2CppSetOption(Option.NullChecks, true)]
    public static string MethodWithNullChecksEnabled()
    {
        // 此方法中将启用 null 检查。
        var tmp = new object();
        return tmp.ToString();
    }
}
public class SomeType
{
    [Il2CppSetOption(Option.NullChecks, false)]
    public string PropertyWithNullChecksDisabled
    {
        get
        {
            // 此处将禁用 null 检查。
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            // 此处将禁用 null 检查。
            value.ToString();
        }
    }
    public string PropertyWithNullChecksDisabledOnGetterOnly
    {
        [Il2CppSetOption(Option.NullChecks, false)]
        get
        {
            //此处将禁用 null 检查。
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            //此处将启用 null 检查。
            value.ToString();
        }
    }
}