Unity2021から追加されたil2CppCodeGenerationを適切に設定するとIL2CPPビルドが最大50%早くなる

Unity2021もLTSがでたので安心して使えますね。・・・使えてますか?

それはそれとして、
Unity2021から追加された EditorUserBuildSettings.il2CppCodeGeneration を適切に設定するとビルドが最大50%早くなるというお話です。

使い方

EditorUserBuildSettings.il2CppCodeGeneration のデフォルト値は OptimizeSpeed で、
フォーラムによると、これがUnity2020以前と同等の挙動だそうです。

// ビルドを早くしたいときは OptimizeSize
// OptimizeSizeってぱっと見はビルド時間伸びそうな印象ありません?今回はビルド時間も短くなります。
EditorUserBuildSettings.il2CppCodeGeneration = Il2CppCodeGeneration.OptimizeSize;

// ランタイムの速度を早くしたいときは OptimizeSpeed
EditorUserBuildSettings.il2CppCodeGeneration = Il2CppCodeGeneration.OptimizeSpeed;

ということですね。
DevelopmentビルドはOptimizeSize、ReleaseビルドはOptimizeSpeed、という使い分けが理想でしょう。
名前の通り、ランタイムでの速度を犠牲にしてビルド時間を縮めているためマシンスペックをギリギリまで使ってるゲームでは注意が必要です。

手動でビルドしている場合、Build Settings上にあるIL2CPP Code Generationの項目で指定可能です。
Faster runtime が OptimizeSpeed、 Faster (smaller) builds が OptimizeSize です。


ここからはおまけです。

実測

フォーラムでは最大50%ビルドが早くなると書いてあったのですが、
最近キャプテンマーベルを見たので自分の目で確かめてみたいと思います。

適当にC#コードがたくさん欲しかったので、UniRxとUniTaskを入れました。

忘れずPlayer SettingsでScripting BackendをIL2CPPに変更します。

コードが消されたら意味ないのでStripping Levelも最低のMinimalにします。

では、OptimizeSpeedとOptimizeSizeで2回ずつビルドしてみましょう。

IL2CPPはキャッシュが強いので毎回Libraryを削除してEditorを再起動し、
Unity2021から追加されたClean Buildからビルドします。
このClean BuildがどこまでCleanされるのか、謎です。

結果

OptimizeSpeed(Faster runtime) / デフォルト、Unity2020以前と同等

  • Build completed with a result of 'Succeeded' in 218 seconds (217844 ms)
  • Build completed with a result of 'Succeeded' in 200 seconds (199657 ms)

OptimizeSize(Faster (smaller) builds)

  • Build completed with a result of 'Succeeded' in 126 seconds (126112 ms)
  • Build completed with a result of 'Succeeded' in 141 seconds (141234 ms)

なんと実測で1.56倍速になりました。
ということで、みなさん活用していきましょう。