第11章 Tuning Practice - Player Settings

この章では、パフォーマンスに影響を与えるProject SettingsにあるPlayerの項目について紹介します。

11.1 Scripting Backend

Unityでは、AndroidやStandalone (Windows、macOS、Linux) といったプラットフォームで、Scripting BackendをMonoかIL2CPPのどちらかから選択できます。第2章「基礎知識」「IL2CPP」で述べたとおりパフォーマンスが向上するため、IL2CPPを選択することを推奨します。

Scripting Backendの設定

図11.1: Scripting Backendの設定

また、Scripting BackendをIL2CPPに変更すると、一部プラットフォームを除いてC++ Compiler Configurationが選択できるようになります。

C++ Compiler Configurationの設定

図11.2: C++ Compiler Configurationの設定

ここではDebug、Release、Masterから選べますが、それぞれビルド時間と最適化度合いのトレードオフがありますので、ビルドの目的に応じて使い分けるとよいでしょう。

11.1.1 Debug

最適化が行われないためランタイムでのパフォーマンスは良くありませんが、ビルド時間は他の設定と比較してもっとも短くなります。

11.1.2 Release

最適化によりランタイムのパフォーマンスが向上し、ビルドしたバイナリのサイズもより小さくなりますが、ビルドに要する時間は伸びます。

11.1.3 Master

そのプラットフォームで利用可能なすべての最適化が有効化されます。たとえばWindows向けのビルドでは、リンク時コード生成 (LTCG) が使用されるなど、よりアグレッシブな最適化が行われます。その代わりとしてビルド時間はRelease設定よりもさらに伸びますが、それが許容できる場合、製品版のビルドにはMaster設定を使用することをUnityは推奨しています。

11.2 Strip Engine Code / Managed Stripping Level

Strip Engine CodeはUnityの機能から、Managed Stripping LevelはC#をコンパイルして生成されるCILバイトコードから、それぞれ使用されないコードを取り除くことにより、ビルドしたバイナリのサイズを削減する効果が期待できます。

しかしながら、あるコードが使用されているかどうかの判定は静的解析に強く依存しているため、コード中で直接参照されていない型や、リフレクションで動的に呼び出しているコードが誤って除去されてしまう場合があります。

その場合にはlink.xmlファイルや、Preserve属性を指定することにより除去されることを回避できます。*1

11.3 Accelerometer Frequency (iOS)

iOS固有の設定で、加速度センサーのサンプリング周波数を変更できます。初期設定では60Hzになっているため、適切な周波数に設定しましょう。とくに加速度センサーを利用していない場合は、必ず設定を無効化しましょう。

サンプリング周波数の設定

図11.3: サンプリング周波数の設定