66
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-06

#最初に

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

参考

66
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?