背景
在Unity4.6.1p5以后版本中,在PlayerSettings—>Other Settings—>Scripting Backend有mono和il2cpp兩個選項,它們是Unity腳本后處理(Scripting Backend)的兩種方式。
概念
IL2CPP 是 Unity一種新的腳本后處理(Scripting Backend)方式,針對.Net平台編譯輸出的IL(中間語言)進行處理。
IL2CPP主要由兩部分組成:
AOT靜態編譯編譯器(il2cpp.exe)
運行時庫(libil2cpp)
其中AOT將 IL轉換為C++源碼,再交給各平台的C++編譯器進行編譯,達到平台兼容的目的;運行時庫則會提供諸如 垃圾回收、線程/文件獲取、內部調用直接修改托管數據結構的原生代碼 的服務與抽象。
IL2CPP腳本后處理技術示例圖:

對比
Mono
構建應用非常快
由於Mono的JIT(Just In Time compilation ) 機制, 所以支持更多托管類庫
支持運行時代碼執行
必須將代碼發布成托管程序集(.dll 文件 , 由mono或者.net 生成 )
Mono VM在各個平台移植異常麻煩,有幾個平台就得移植幾個VM(WebGL和UWP這兩個平台只支持 IL2CPP)
Mono版本授權受限,C#很多新特性無法使用
iOS仍然支持Mono , 但是不再允許Mono(32位)應用提交到Apple Store
IL2CPP
相比Mono, 代碼生成有很大的提高
可以調試生成的C ++代碼
可以啟用引擎代碼剝離(Engine code stripping)來減少代碼的大小
程序的運行效率比Mono高,運行速度快
多平台移植非常方便
相比Mono構建應用慢
只支持AOT(Ahead of Time)編譯

總結
IL2CPP比較適合開發和發布項目 ,但是為了提高版本迭代速度,可以在開發期間切換到Mono模式(構建應用快)。
————————————————
