Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated 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

参考

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
36
Help us understand the problem. What are the problem?