Edited at

Unity開発するにあたって知っておきたいコンパイラのすゝめ(Part2~IL2CPP編~)


最初に

この記事は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を使用した場合の流れ

(Unity公式チュートリアルから)

image.png


  1. 最初にC#で書かれたゲームロジックのコードを.NETによってILコードにコンパイルします。

  2. プラグインやBCLは「Unused Bytecode Stripper」と言うUnityのツールによって、DLLから使われていないクラスとメソッドを見つけ削除します。これによってコードのサイズを小さくすることができます。

  3. その後、ILコードをil2cpp.exeを使用してC++コードに変換します。

  4. 変換されたC++コードとIL2CPPのランタイムはネイティブのプラットフォームコンパイラによってコンパイルされます。

  5. 最後にコードは対象プラットフォームの実行ファイルまたはDLLのいずれかにリンクされます。


Monoと比較して

Monoのデメリットとして、


  • C/C++に速度などのランタイム性能が追いつかない。

  • 23個のプラットフォームとアーキテクチャの保守などに手間がかかっている。

  • GC中にアプリがフリーズされる可能性あり。

IL2CPPを使うことでC++の性能とC#の生産性を兼ね備えることができます。ただしビルド時間はMonoよりも長くなります。また、Monoとは異なり、AOTコンパイルのみサポートしています。


ビルド時間の削減方法


  • インクリメントビルドの使用。

  • マルウェア対策のソフトウェアを無効にする。

  • プロジェクトとBuildフォルダをSSD下に格納。


IL2CPPの使用方法

ターゲットプラットフォームのPlayerSettingsウィンドウからConfigurationセクションのScripting BackendにIL2CPPを選択しましょう。

image.png


参考