Unity の Asset Bundle Browser ツール
ソーシャル API

ファイルサイズの削減

ビルドしたアプリのファイルサイズを最小限に抑えることは、特にモバイルデバイスやサイズ制限のあるアプリケーションストアにとって重要です。サイズを縮小する最初のステップは、どのアセットが最もサイズ縮小に効果的かを判断することです。なぜなら、これらのアセットは最適化に利用できる最有力候補であるからです。この情報は、ビルドを実行した直後にエディターログに表示されます。コンソールウィンドウ (Window > General > Console) に移動し、右上の小さいドロップダウンメニューをクリックし、Open Editor Log を選択します。

ビルド直後のエディターログ
ビルド直後のエディターログ

タイプによってアセット項目ごとに分類されたログが提供され、サイズに貢献するための個々のアセットの全リストを表示します。一般的にスクリプト、レベルやシェーダーはしばしば無視できますが、テクスチャ、音楽、ビデオ等が、最もストレージを占有します。File Headers について少し触れておくと項目としてはアセットではありません。ヘッダーは、実際は特別なデータで “生” アセットファイルを保存するための参照と設定です。ヘッダーは、通常アセットのサイズにほとんど違いを与えませんが、Resources フォルダー内に多数の大規模アセットがある場合は、値が大きくなる可能性があります。

ログは自身のアセット内で削除や最適化したいときに役立ちますが、利用する前によく考える必要があります。

  • Unity は、インポートしたアセットを独自の内部フォーマットに変換するため、ソースアセットの種類はさほど関係ありません。例えば、プロジェクトでマルチレイヤーの Photoshop のテクスチャがある場合、ビルドされる前に平坦化され、圧縮されます。テクスチャをPNG ファイルとしてエクスポートしてもビルドサイズに違いはありません。ですから、開発時に最も便利なフォーマットにするべきです。

  • Unity は、ビルド中に使用していないアセットを省くので、プロジェクトからアセットを手動で削除する必要はありません。削除されない唯一のアセットは、スクリプト (一般的にかなり小さい) と Resources フォルダー内のアセットです (Unity 側でどれが必要か判断することができないからです)。これを踏まえて、Resources フォルダー内には本当に必要なアセットのみを含むようにする必要があります。Resources フォルダーのアセットを アセットバンドル で置き換えることも可能です ー そうすると、Unity はアセットを動的に読み込み、そうすることによって、プレイヤーサイズを削減します。

ビルドサイズを削減するための提案

テクスチャ

通常、テクスチャはビルドサイズのうち、ほぼ大部分を消費します。まず最初に、圧縮テクスチャ形式を使用できるかどうかを確認してください。詳細は、 platform-specific Texture compression を参照してください。

圧縮形式を使用してもサイズが減らない場合は、テクスチャの大きさ (ピクセル) を減らしてみてください。実際のソースのコンテンツを編集することなくこれを行うには、プロジェクトビューでテクスチャを選択し、インスペクターウインドウで Max Size を小さくします。これがゲーム内でどのように表示されるかを確認するには、シーンビュー でテクスチャを使用するオブジェクトを拡大し、それから、シーンビューで見た目が悪くなり始めるまで、Max Size を調整します。テクスチャの最大サイズを変更してもテクスチャアセットには影響せず、ゲームの解像度に影響するだけです。

テクスチャの最大サイズを変更してもテクスチャアセットには影響せず、ゲームの解像度に影響するだけです
テクスチャの最大サイズを変更してもテクスチャアセットには影響せず、ゲームの解像度に影響するだけです

デフォルトでは、Unity はインポート時にすべてのテクスチャを圧縮します。ワークフローをより高速にするため、 Unity < Preferences の順に選択し、 Compress Assets on Import のチェックボックスをオフにします。この設定にかかわらず、すべてのテクスチャはビルド内で圧縮されます。

メッシュおよびアニメーション

ゲームファイルでの使用スペースを減らすよう、 メッシュ およびインポートされたアニメーションクリップを圧縮できます。メッシュの圧縮を行うには、圧縮したいメッシュを選び、それから、インスペクターウインドウで Mesh CompressionLowMediumHigh のいずれかにします。メッシュとアニメーションの圧縮は、少ないスペースしか取りませんが圧縮は不精密なデータになることに注意してください。あなたのモデルで許容できる圧縮レベルを試してみてください。

メッシュ圧縮は小さいデータファイルを生成するだけで、ランタイムで使用するメモリは少なくならないことに注意してください。アニメーションの Keyframe Reduction を使うと、データファイルを縮小し、ランタイムで使用するメモリも減ります。一般に、常に Keyframe Reduction を有効にしておくとよいでしょう。詳しくは アニメーションクリップ を参照してください。

.NETライブラリサイズの削減

Unityは2つの.NET API互換性レベルをサポートしています。.NET 4.xと.NET Standard 2.0。 .NET Standard 2.0は.NET APIのより小さなサブセットに制限され、サイズを小さく抑えるのに役立ちます。

Unity の Asset Bundle Browser ツール
ソーシャル API