The IL2CPP scripting backend converts IL code from scripts and assemblies in a Unity project to C++ code which is then compiled using platform native compilers. For the most part, the scripting backend should not matter. However, IL2CPP does provide a few useful options which can be controlled.
When using the IL2CPP scripting backend, 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:
| 옵션 | 설명 | **기본값** | |:—|:—|:—| |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 will 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. | 활성화 | |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. | 활성화 | |Divide by zero checks | 이 옵션을 활성화하면 IL2CPP에 의해 생성된 C++ 코드가 정수 나눗셈 항목에 0으로 나누기 체크를 포함하고 필요한 경우 매니지드 DivideByZeroException 예외를 발생시킵니다. 이 옵션을 비활성화하면 정수 나눗셈 항목의 0으로 나누기 체크를 생성된 C++ 코드로 내보내지 않습니다. 이 옵션은 대부분의 프로젝트에서 비활성화해야 합니다. 0으로 나누기 체크를 실행하면 많은 런타임이 소모되므로 필요한 경우에만 활성화합니다. | 비활성화 |
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();
}
The Il2CppSetOptions attribute can be applied to types, methods, and properties. The attribute from the most local scope will be used.
[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();
}
}
}
The C++ code generated by the IL2CPP scripting backend can be updated incrementally, allowing incremental C++ build systems to compile only the changes source files. This can signifigantly lower iteration times with the IL2CPP scripting backend. Incremental builds with IL2CPP are supported on the iOS platform only now.
증분 빌드를 사용하려면 “ Build Settings” 다이얼로그에서 “ Build”를 선택한 후 “ Append” 옵션을 선택합니다. “ Replace” 옵션을 선택하면 클린 빌드가 수행됩니다.