Play Asset Delivery (PAD) は、150 MB を超えるアプリケーションを配信する際に使用する Google Play ストアの機能です。PAD は、APK 拡張ファイル (OBB) を使用して追加のアセット (テクスチャ、サウンド、メッシュなど) を保存する代わりに、アセットパックを使用します。Google はアセットパックを Google Play でホストして提供するため、アプリケーションリソースをユーザーに送信するためのコンテンツ配信ネットワークを構築する必要がありません。PAD の詳細については、Android の Play Asset Delivery を参照してください。
重要: PAD は、Google Play ストアでのみ使用できます。大規模なアプリケーションを他のデジタル配信サービスに対応させたい場合は、APK 拡張ファイル (OBB) を利用してください。
Play Asset Delivery を使用するには、Android App Bundles をビルドし、アプリケーションバイナリを分割できるようにプロジェクトを設定する必要があります。
Unity を設定して Android App Bundle をビルドするには、以下を行います。
アプリケーションのバイナリを分割するように Unity を設定するには、以下を行います。
アプリケーションをビルドすると、Unity は、アプリケーションを ベースモジュール とアセットパックに分割したものを含む Android App Bundle を生成します。
Unity が自動的に生成するアセットパックとは別に、自分でカスタムのアセットパックを作成することもできます。これは、アセットパックのコンテンツをコントロールする必要がある場合に便利です。Unityは、作成したカスタムアセットパックを、最終的な Android App Bundle に加えます。カスタムアセットパックの詳細および設定方法については、カスタムアセットパック を参照してください。
アセットパックには ダウンロードサイズの制限 があります。これを考慮して、Unity は追加アセットのサイズに応じてアセットパックの生成方法を変えます。
install-time
配信モード にします。カスタムアセットパック を作成しない場合、デバイスがアプリケーションのインストールの一部としてアセットパックをダウンロードし、ユーザーが最初にアプリケーションを起動するときに、すべてのアセットが利用可能になることを意味します。install-time
配信モードを設定し、小さい方のアセットパックに fast-follow
配信モードを設定します。ノート: これらのアセットパックのいずれかが、Google Play ストアで許可されているアップロード制限よりも大きい場合、Unity は警告を表示しますが、ビルドに失敗することはありません。また、Unity はアセットパックのサイズを個別にチェックしていますが、カスタムアセットパックのサイズ検証は行いません。つまり、カスタムアセットパックと Unity が生成したアセットパックの組み合わせが、Google Play Store で許容されるサイズを超えていても、Unity は警告やエラーを表示しません。
Unity が自動生成するアセットパックでは、Unity は 配信モード の変更をサポートしていません。アセットパックの配信モードを変更したい場合は、自身のアセットでカスタムアセットパックを作成してください。
Unity は、ランタイムにアセットパックを管理するために、API を提供しています。これらの API は Google の PlayCore API を使用しているため、PlayCore と同じ制限があり、install-time
アセットパックを管理することはできません。PlayCore API を使用するということは、アプリケーションが PlayCore プラグインを必要とするということでもあります。プロジェクトにアセットパック (カスタム アセットパックまたは Unity が生成したアセットパック) がある場合、Unity はアプリケーションのマニフェストに PlayCore の依存関係を自動的に追加します。
アセットパックをダウンロードし、そのアセットにアクセスする方法は、アセットパックの配信モードによって異なります。アセットパックの配信モードは 3 種類あります。
install-time
: Google Play は、デバイスがアプリケーションをインストールする際に install-time
アセットパックを自動的にダウンロードします。Google Play では、これらのアセットパックを基本アプリケーションの一部とみなし、エンドユーザーはアプリケーション全体をアンインストールしない限り、アセットパックをアンインストールすることはできません。PlayCore API は、 install-time
アセットパックを処理しません。つまり、 install-time
アセットパックの状態を確認したり、ダウンロードを要求したり、削除したりすることはできません。また、これらのアセットパック内のアセットに直接アクセスすることもできません。ただし、Unity が生成した install-time
アセットパック内のストリーミングアセットは例外です。ストリーミングアセットにアクセスするには、Application-streamingAssetsPath を使用してストリーミングアセットの場所へのパスを取得し、UnityWebRequest を使用してそのパス内のアセットにアクセスします。カスタムアセットパックを作成した場合、標準のファイル API を使ってその中のアセットにアクセスすることはできません。代わりに、Android の AssetManager API を使用します。fast-follow
: Google Play では、アプリケーションをインストールした後、fast-follow
アセットパックのダウンロードを自動的に開始します。ただし、アプリケーションの初回起動時に、一部の fast-follow
アセットパックが利用できない可能性があります。状況を確認して fast-follow
アセットパックをダウンロードするには、以下を参照してください。on-demand
: Google Play では、on-demand
アセットパックのダウンロードが自動的に行われません。手動でダウンロードを開始する必要があります。その方法については、以下の通りです。配信モードの詳細については、配信モード を参照してください。
アプリケーションが fast-follow
または on-demand
アセットパックを使用している場合、アプリケーションがアセットパック内のアセットにアクセスする前に、デバイスがこれらのアセットパックをダウンロードする必要があります。アセットパックの状態を確認し、デバイス上にない場合にダウンロードするには、まず各アセットパックの名前を知る必要があります。Unity が生成したアセットパックの名前を取得するには、AndroidAssetPacks.GetCoreUnityAssetPackNames を呼び出してください。カスタムアセットパック の名前を取得するランタイム API はありません。そのため、自分で管理する必要があります。カスタムアセットパックの名前は、ビルド時にディレクトリ名として設定します。
アセットパックの名前がわかったら、各アセットパックの状態を確認するために、AndroidAssetPacks.GetAssetPackStateAsync にアセットパックの名前を渡して呼び出します。これにより、問い合わせたアセットパックの状態が返されるので、その結果をもとに、アセットパックをダウンロードする必要があるかどうかを判断することができます。Unity が生成したすべてのアセットパックの状態をすばやく照会したい場合は、AndroidAssetPacks.coareUnityAssetPacksDownloaded を使用します。これは、最初のシーン以外をロードしたり、Unity が扱う他のリソースにアクセスしようとする前に、Unity が生成したすべてのアセットパックが利用可能であることを確認できるため便利です。
ダウンロードが必要なアセットパックごとに、AndroidAssetPacks.DownloadAssetPackAsync にアセットパックの名前を渡して呼び出します。アセットパックのダウンロード中は、ダウンロード状態を監視してください。なぜなら、ダウンロードが一時停止したり、失敗したりすることがあるからです。これを行うには 2 つの方法があります。
特定のアセットパックに含まれる非コードリソースを制御したい場合は、カスタムアセットパックを作成することができます。Unity が生成したアセットパックとは異なり、カスタムアセットパックには配信モードを設定することができます。カスタムアセットパックを作成する場合、Google Play ストアにはアセットパックのサイズと数量の制限があります。制限に関する情報は、ダウンロードサイズの制限 を参照してください。
カスタムアセットパックを作成するには、.androidpack で終わる名前のディレクトリを作成します。このディレクトリは、プロジェクトの Assets ディレクトリの任意の場所、または任意のサブディレクトリに置くことができます。例えば、 MyAssets1 という名前のカスタムアセットパックを作成するには、以下を行います。
on-demand
となっているため、配信モードを変更しない場合は、ランタイムに手動でアセットパックをダウンロードする必要があります。この方法については、ランタイムの汗っとパックの管理 を参照してください。apply plugin: 'com.android.asset-pack'
assetPack {
packName = "MyAssets1"
dynamicDelivery {
deliveryType = "fast-follow"
}
}
これにより、配信モードが fast-follow
に設定され、Google Play がアプリケーションをインストールした後にアセットパックを自動的にダウンロードします。このファイルの形式については、アセット配信を統合する を参照してください。
ノート: build.gradle
ファイルで指定する packName は、.androidpack 拡張子を付けずに設定したアセットパックのディレクトリ名と一致する必要があります。