#最初に
この記事はUnityで使用されているコンパイラについてまとめた記事のうちの、C#からC++へコード変換を行うIL2CPPについて簡単にまとめた記事です。
IL2CPPとは?
Unityが開発したコンパイラであり、ILコードをC++コードに組み立ててくれます。IL2CPPの使用することによって、パフォーマンスやセキュリティなど向上する可能性があります。IL2CPPならLINQも基本的に使えるようです。
IL2CPPは、
- AOTコンパイラ
- VMをサポートするライブラリ
の二つで構成されています。
IL2CPPのAOTコンパイラはil2cpp.exeと言う名前になっており、WindowsならEditor\Data\il2cppディレクトリ、MacOSではUnityインストール場所のContents/Frameworks/il2cpp/buildディレクトリ下に格納されています。il2cpp.exeはC#で作成されており、.NET及びMonoコンパイラを使用してコンパイルされます。
IL2CPPを使用した場合の流れ
- 最初にC#で書かれたゲームロジックのコードを.NETによってILコードにコンパイルします。
- プラグインやBCLは「Unused Bytecode Stripper」と言うUnityのツールによって、DLLから使われていないクラスとメソッドを見つけ削除します。これによってコードのサイズを小さくすることができます。
- その後、ILコードをil2cpp.exeを使用してC++コードに変換します。
- 変換されたC++コードとIL2CPPのランタイムはネイティブのプラットフォームコンパイラによってコンパイルされます。
- 最後にコードは対象プラットフォームの実行ファイルまたはDLLのいずれかにリンクされます。
Monoと比較して
Monoのデメリットとして、
- C/C++に速度などのランタイム性能が追いつかない。
- 23個のプラットフォームとアーキテクチャの保守などに手間がかかっている。
- GC中にアプリがフリーズされる可能性あり。
IL2CPPを使うことでC++の性能とC#の生産性を兼ね備えることができます。ただしビルド時間はMonoよりも長くなります。また、Monoとは異なり、AOTコンパイルのみサポートしています。
ビルド時間の削減方法
- インクリメントビルドの使用。
- マルウェア対策のソフトウェアを無効にする。
- プロジェクトとBuildフォルダをSSD下に格納。
IL2CPPの使用方法
ターゲットプラットフォームのPlayerSettingsウィンドウからConfigurationセクションのScripting BackendにIL2CPPを選択しましょう。