Version: Unity 6.0 (6000.0)
言語 : 日本語
ウェブのアセットバンドル
ウェブビルドの最適化

分布サイズとコードストリッピング

ウェブ用にパブリッシュする場合は、コンテンツの開始前のダウンロード時間を妥当なものにするために、ビルドサイズを小さく抑えることが重要です。アセットサイズを縮小するための一般的なヒントについては、ビルドのファイルサイズの削減を参照してください。

ウェブに特有のヒントとコツ

  • テクスチャインポーターですべての圧縮テクスチャに対して Crunch テクスチャ圧縮形式を指定します。

  • 開発ビルドをデプロイしないでください。開発ビルドは圧縮も縮小もされず、ファイルサイズが大幅に増加します。

  • ビルドで例外を必要としない場合は、Player ウィンドウで (Edit > Project Settings > Web をクリック)、Publishing Settings を開いて、Enable ExceptionsNone に設定します。

  • Player settings > Other Settings パネルで Strip Engine Code を有効にして、効率的なビルドを行います。

  • サードパーティのマネージ DLL を使用する場合は、生成されるコードサイズが増加する原因となる依存関係を伴う場合がある点に留意してください。

リリースビルドを作成する場合、Unity はウェブ Player 設定の Publishing Settings で選択された Compression Format に従ってビルド出力ファイルを圧縮します。

圧縮ビルドの公開方法の詳細については、圧縮ビルドのデプロイを参照してください。

コードのストリッピング

Unity はデフォルトで、ビルドからすべての未使用コードを削除します。これは Player 設定から変更できます (メニュー: Edit > Project Settings に移動し、Player カテゴリを選択)。Strip Engine Code オプションにアクセスするには Other Settings パネルを選択します。ストリッピングを有効にしてビルドすることをお勧めします。

コードストリップを使用すると、Unity は使用されている (スクリプトコード内、または、シーン内のシリアル化されたデータ内で参照されている) UnityObject 派生クラスがないかプロジェクトをスキャンします。次に、どのクラスも使用されていない Unity のサブシステムをビルドから削除します。これにより、ビルドのコード数が削減され、ダウンロードが少なくなり、パースするコードも減少します (したがって、コードの実行速度が速くなり、メモリの使用量も少なくなります)。

コードストリップの問題

コードストリッピングについては、プロジェクトで実際に必要なコードがストリッピングされると問題が発生する可能性があります。これはメインビルドに含まれていないクラスを使用している AssetBundle を実行時に読み込んでしまい、それらがプロジェクトから取り除かれているために起こります。これが発生すると、ブラウザーの JavaScript コンソールにエラーメッセージが表示されます (さらにエラーが発生する場合もあります)。 例:

Could not produce class with ID XXX

これらのエラーをトラブルシューティングするには、クラス ID リファレンス で ID (上記の例では XXX) を調べて、どのクラスのインスタンスを作成しようとしているかを確認します。そのような場合は、クラスへの参照をスクリプトかシーンに追加するか、link.xml ファイルをプロジェクトに追加することによって、クラスのコードを強制的にビルドに追加できます。

以下に示すのは、Collider クラス (および Physics モジュール) がプロジェクト内で保持されるようにする例です。この XML コードを link.xml というファイルに追加し、そのファイルを Assets フォルダーに配置します。

<linker>
    <assembly fullname="UnityEngine">
        <type fullname="UnityEngine.Collider" preserve="all"/>
    </assembly>
</linker>

ストリップがビルドの問題を引き起こしていることが疑われる場合は、テスト中に Strip Engine Code オプションを無効にすることも可能です。

Unity には、適切なストリップを行うようプロジェクトを最適化するために、ビルドに含まれるモジュールやクラスを確認する便利な方法がありません。ただし、含まれているクラスとモジュールの概要を確認するには、ビルドを実施した後に生成されるファイル Temp/StagingArea/Data/il2cppOutput/UnityClassRegistration.cpp を調べます。

Strip Engine Code オプションは Unity エンジンコードにのみ影響します。IL2CPP は常にマネージ DLL とスクリプトからバイトコードを除去します。このことは、コードの静的参照を通してではなく、リフレクションを通して動的にマネージ型を参照する必要がある場合に問題を引き起こす可能性があります。リフレクションを通して型にアクセスする必要がある場合は、それらの型を保持するために link.xml ファイルを設定する必要もあります。link.xml ファイルの詳細については、iOS ビルドサイズ最適化に関するドキュメントページを参照してください。

ビルド出力ファイルの移動

Build フォルダーの場所を変更するには、ウェブテンプレートの index.html ファイルの buildUrl 変数を変更します。

Build フォルダー内のファイルの場所を変更するには、index.html ファイル内の config 変数のパラメーターで、それぞれの URL (すなわち、dataUrlwasmCodeUrlwasmMemoryUrlwasmFrameworkUrl) を変更します。

コンテンツ配信ネットワーク (CDN) でファイルをホストする場合は、これらに外部サーバーの URL を指定できますが、これを行うためには、ホスティングサーバーでオリジン間リソース共有 (CORS) が有効になっている必要があります。CORS の詳細については、ウェブネットワーキングのマニュアルページを参照してください。

インクリメンタルビルド

IL2CPP によってプロジェクト用に生成された C++ コードは増分によりコンパイルされます。つまり、最後のビルド以降に変更された C++ コードのみが再度コンパイルされます。変更のないソースコードは以前のビルドで作成された同じオブジェクトファイルを再使用します。増加による C++ ビルドに使用されるオブジェクトファイルは、Unity プロジェクトの Library/il2cpp_cache ディレクトリに保存されます。

インクリメンタルコンパイルを使用しないで、生成された C ++ コードをゼロからクリーンにビルドするには、Unity プロジェクトの Library/il2cpp_cache ディレクトリを削除します。Unity エディターのバージョンが以前のウェブビルドで使用されていたものと異なる場合、Unity は自動的にゼロからクリーンなビルドを行います。


  • Full Without Stacktrace を Unity 2017.3 で追加
ウェブのアセットバンドル
ウェブビルドの最適化