ビルドしたアプリのファイルサイズを最小限に抑えることは、特にモバイルデバイスやサイズ制限のあるアプリストアにとって重要です。サイズを縮小する最初のステップは、どのアセットが最もサイズ縮小に効果的かを判断することです。なぜなら、これらのアセットは最適化に利用できる最有力候補であるからです。この情報は、ビルドを実行した直後にエディターログに表示されます。コンソールウィンドウ (メニュー: Window > General > Console) に移動し、右上の小さいドロップダウンメニューをクリックし、Open Editor Log を選択します。
エディターログは、タイプによってアセット項目ごとに分類されたサマリーを提供し、貢献するサイズの順に個々のアセットの全リストを表示します。通常、テクスチャ、サウンド、アニメーションなどは最もストレージを消費し、スクリプト、レベル、シェーダーは通常、最も影響が小さくなります。リストに記載されている__ファイルヘッダー__はアセットではありません。ファイルヘッダーは、実際には、リファレンスと設定を格納するために“生”アセットファイルに追加される余分なデータです。ヘッダーは、通常アセットのサイズにほとんど違いを与えませんが、Resources フォルダー内に多数の大規模アセットがある場合は、値が大きくなる可能性があります。
ログは自身のアセット内で削除や最適化したいときに役立ちますが、利用する前によく考える必要があります。
Unity は、アセットを独自の内部フォーマットに変換してインポートするため、元となるアセットの種類はさほど関係ありません。例えば、プロジェクトでマルチレイヤーの Photoshop のテクスチャを持っている場合、ビルドされる前に平坦化され、圧縮されます。.png ファイルのテクスチャをエクスポートしてもビルドサイズに違いはないので、開発時に最も便利なフォーマットにするべきです。
Unity は、ビルド中に使用していないアセットを省くので、プロジェクトからアセットを手動で削除する必要はありません。削除されない唯一のアセットは、スクリプト (一般的にかなり小さい) と Resources フォルダー内のアセットです (Unity 側でどれが必要か判断することができないからです)。これを踏まえて、Resources フォルダー内には本当に必要なアセットのみを含むようにする必要があります。Resources フォルダーのアセットを AssetBundle で置き換えることも可能です ー そうすると、Unity はアセットを動的に読み込み、そうすることによって、プレイヤーサイズを削減します。
通常、テクスチャはビルドサイズのうち、ほぼ大部分を消費します。まず最初に、圧縮テクスチャ形式を使用できるかどうかを確認してください。詳細は、プラットフォーム固有のテクスチャ圧縮 を参照してください。
圧縮形式を使用してもサイズが減らない場合は、テクスチャの大きさ (ピクセル) を減らしてみてください。実際のソースのコンテンツを編集することなくこれを行うには、Project ウィンドウでテクスチャを選択し、インスペクターウインドウで Max Size を小さくします。これがゲーム内でどのように表示されるかを確認するには、シーンビューでテクスチャを使用するオブジェクトを拡大し、それから、シーンビューで見た目が悪くなり始めるまで、Max Size を調整します。テクスチャの最大サイズを変更してもテクスチャアセットには影響せず、ゲームの解像度に影響するだけです。
デフォルトでは、Unity はインポート時にすべてのテクスチャを圧縮します。ワークフローをより高速にするため、Unity > Preferences の順に選択し、Compress Assets on Import のチェックボックスをオフにします。この設定にかかわらず、すべてのテクスチャはビルド内で圧縮されます。
ゲームファイルでの使用スペースを減らすよう、メッシュ およびインポートされたアニメーションクリップを圧縮できます。メッシュの圧縮を行うには、圧縮したいメッシュを選び、それから、インスペクターウインドウで Mesh Compression を Low、Medium、High のいずれかにします。メッシュとアニメーションの圧縮は、少ないスペースしか取りませんが圧縮は不精密なデータになることに注意してください。あなたのモデルで許容できる圧縮レベルを試してみてください。
メッシュ圧縮は小さいデータファイルを生成するだけで、ランタイムで使用するメモリは少なくならないことに注意してください。アニメーションのキーフレーム削減は、小さいデータファイルを生成し、ランタイムで使用するメモリも少なくなります。一般に、常にキーフレーム削減を有効にしておくべきです。詳細については、アニメーションクリップ のドキュメントを参照してください。
Unity は .NET 4.x と .NET Standard 2.0 の 2 つの .NET API 互換性レベルをサポートしています。.NET Standard 2.0 は .NET API のより小さなサブセットに制限され、サイズを小さく抑えるのに役立ちます。