Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

最初に

この記事は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

参考

4_mio_11
スローペースで生きてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away