Version: 2021.3
言語: 日本語
カスタムアセットパックの作成
Android のグラフィックス

ランタイムのアセッパックの管理

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 つの方法があります。

  • AndroidAssetPacks.DownloadAssetPackAsync が返すDownloadAssetPackAsyncOperation インスタンスを定期的に確認してください。
  • 2 番目のパラメーターとしてコールバックを受け取る AndroidAssetPacks.DownloadAssetPackAsync のバージョンを使用してください。渡すコールバックは、ダウンロードの状態を判断するために使用する AndroidAssetPackInfo をパラメーターとしてとる必要があります。

その他の参考資料

カスタムアセットパックの作成
Android のグラフィックス