IL2CPP スクリプティングバックエンド、どのように il2cpp.exe が C++ コードを生成するかを制御することができます。特に、C# 属性を使って以下のランタイムチェックを有効、または、無効にすることができます。
オプション | 説明 | デフォルト値 |
---|---|---|
Null checks | このオプションを有効にすると、IL2CPP によって生成された C++ コードに null チェックが加えられ、必要に応じて管理された NullReferenceException 例外が投げられます。 このオプションを無効にすると、生成された C++ コードに null チェックを加えません。プロジェクトのなかには、このオプションを無効にすると実行時のパフォーマンスが向上するものもあります。 ただし、生成されたコードで null 値へのアクセスは保護されておらず、誤った挙動を引き起こす可能性があります。通常、null 値への参照が解除された直後にゲームがクラッシュしますが、保証できません。 このオプションを無効にする場合は、慎重に行ってください。 |
有効 |
Array bounds checks | このオプションを有効にすると、IL2CPP によって生成された C++ コードに配列境界チェックが加えられ、必要に応じて管理された IndexOutOfRangeException 例外が投げられます。 このオプションを無効にすると、生成された C++ コードに配列境界チェックを加えません。プロジェクトのなかには、このオプションを無効にすると実行時のパフォーマンスが向上するものもあります。ただし、生成されたコードで無効なインデックスへのアクセスは保護されておらず、任意のメモリーロケーションから読み込んだり、書き込んだりするなど、誤った挙動を引き起こす可能性があります。大抵はこのようなメモリーアクセスによって性急な悪影響は発生せず、静かにゲームの状態を悪化させる場合があります。 このオプションを無効にする場合は、非常に慎重に行ってください。 | 有効 |
Divide by zero checks | このオプションを有効にすると、IL2CPP によって生成された C++ コードは整数の除算に対して 0 で割っていないかチェックを行い、必要に応じて管理された DivideByZeroException 例外を投げます。このオプションが無効になっていると、0 による除算チェックは整数の除算時に C++ コードで行われません。ほとんどのプロジェクトではこのオプションは無効にしてあるのが望ましいです。このチェックは実行時コストが高いため、有効にするのは必要な場合のみです。このオプションはデフォルトでは無効になっています。 | 無効 |
ランタイムチェックは、Il2CppSetOptions
属性を使って C#コードで有効、または、無効にすることができます。この属性を使用するには、コンピューターの Unity エディターインストールファイルの 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 checks は無効になります
var tmp = new object();
return tmp.ToString();
}
[Il2CppSetOption(Option.NullChecks, true)]
public static string MethodWithNullChecksEnabled()
{
// このメソッドで Null checks は有効になります
var tmp = new object();
return tmp.ToString();
}
}
public class SomeType
{
[Il2CppSetOption(Option.NullChecks, false)]
public string PropertyWithNullChecksDisabled
{
get
{
// このメソッドで Null checks は無効になります.
var tmp = new object();
return tmp.ToString();
}
set
{
// このメソッドで Null checks は無効になります
value.ToString();
}
}
public string PropertyWithNullChecksDisabledOnGetterOnly
{
[Il2CppSetOption(Option.NullChecks, false)]
get
{
// このメソッドで Null checks は無効になります
var tmp = new object();
return tmp.ToString();
}
set
{
// このメソッドで Null checks は有効になります
value.ToString();
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.