Addressable Assetのホストサービス

##七、Addressable Assetのホストサービス

ホストサービスは、Addressable Assetsの構成データを使用して、ローカルまたはネットワークに接続されたアプリケーションビルドにパッケージ化されたコンテンツを提供するための統合ツールを提供します。ホストサービスは、パッケージ化されたコンテンツをテストする際の反復速度を向上させるように設計されており、ローカルおよびリモートネットワーク上の接続されたクライアントにコンテンツを提供するためにも使用できます。
###7.1Packed Modのテストと反復

Editor Play Modeテストからプラットフォームアプリケーションビルドテストに移行すると、開発プロセスは複雑になって、時間コストも多くなります。ホスティングサービスは、Addressablesグループ構成に直接マップする拡張可能なエディター埋め込みコンテンツ配信サービスを提供します。カスタムのAddressables構成ファイルを使用すると、Unity Editor自体からすべてをロードするようにアプリケーションをすばやく構成できます。これには、開発システムへのネットワークアクセスを備えたモバイルデバイスまたはその他のプラットフォームに配置されたビルドが含まれます。
 
Assetホスティングサービスをサーバー環境に配置し、batch mode(headless)で実行して、イントラネットおよびエクストラネット上のUnityクライアントアプリケーションにコンテンツホスティングを提供することもできます。
 
###7.2設定

 
このセクションでは、Assetホストサービスの初期設定について詳しく説明します。エディターのワークフローに重点を置いていますが、AddressableAssetSettingsクラスのHostingServicesManagerプロパティを設定することにより、APIを使用してホストサービスを構成できます。
 
####7.2.1ホストサーバーの構成

Hosting windowウィンドウを使用して、新しいホストサーバーを追加、構成、および有効にします。
 
エディターで、Window>AssetManagement>Addressables>hostを選択するか、AddressablesグループウィンドウメニューのTools>HostingServicesボタンをクリックして、Hostingウィンドウにアクセスします。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/f158bcf1-6b75-de33-07a5-b604df1280d1.png)


新しいローカルホストサービスを追加するには、Create > Local Hostingボタンをクリックします。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/a6d850e4-ca50-dc3b-fe4c-61d6dfcd237d.png)


注：カスタムホストサービスタイプの実装の詳細については、「カスタムサービスについて」セクションを参照してください。
 
新しく追加されたサービスは、Addressables HostingウィンドウのHostingServicesセクションに表示されます。 Service Nameフィールドを使用して、サービスの名前を入力します。
 
新しいサービスはデフォルトで無効になっています。サービスを有効にしたいなら、Enableボタンを選択します。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/c0c6a0bd-7385-f923-3b72-567601c189ed.png)


HTTPホストサービスは、起動時にポート番号を自動的に割り当てます。ポート番号はUnity sessions間で保存され、再利用されます。別のポートを選択するには、Portフィールドで特定のポート番号を割り当てるか、Resetボタンを使用して別のポートをランダムに割り当てます。
 
注：ポート番号をリセットする場合は、完全なアプリケーションビルドを実行して、正しいURLを生成して埋め込む必要があります。
HTTPホスティングサービスが有効になり、各Asset GroupのBuildPathで指定されたディレクトリからコンテンツを提供できるようになりました。
 
####7.2.2 Profile設定

開発中にホストサービスを使用する場合、Unityは、構成ファイルを作成することをお勧めします。ホストサービスからコンテンツをロードするために、このファイルはすべてのAsset Groupsを、1つ以上の特別に作成されたディレクトリを使用するように構成する
 
エディタで、Windows>AssetManagement>Addressables>Profilesを選択するか、AddressablesグループウィンドウメニューのTools>Profilesボタンをクリックして、Profilesウィンドウにアクセスします。これらの設定には、AddressableAssetSettings Inspectorからアクセスすることもできます。
 
次に、新しい構成ファイルを作成します。以下の例では、新しいプロファイルの名前はEditorHostedです。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/d4ff1d73-a269-2302-f10b-2f9b2480f3f8.png)


ホストサービスからの読み込みを上書きするには、読み込みパスフィールドを変更します。HttpHostingServiceは、サービスに割り当てられたローカルIPアドレスとポートを使用するURLです。Addressablesホストウィンドウでは、PrivateIpAddressおよびHostingServicePortという名前の構成ファイル変数を使用してURLを作成できます。（たとえば、http：// [PrivateIpAddress]：[HostingServicePort]））。
 
また、Assets folder外の共通ディレクトリを指すように、すべてのビルドパス変数を変更する必要があります。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/206e3d22-79c5-8436-db70-0c50b350cd43.png)


各グループが正しく構成されていることを確認します。BuildPathとLoadPathはそれぞれ構成ファイルに設定されることを確保します。これらの構成ファイルは、ホストサービスに用いられるために変更されました。この例では、LoadPathの構成ファイル変数を展開して、ホストサービスからロードする正しい基本URLをビルドする方法を確認できます。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/1f48e08a-9611-b575-1b12-55b93f3e564e.png)


最後に、Addressables Groupsウィンドウから新しい構成ファイルを選択し、ビルドを作成して、ターゲットデバイスに配置します。Unity Editorは、HttpHostingServiceサービスを介してアプリケーションからのすべてのロードリクエストを処理するようになりました。再配置せずにコンテンツを追加および変更できるようになりました。Addressableコンテンツを再生成し、配置されたアプリケーションを再起動してコンテンツを更新します。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/a8d1a712-f877-592b-6ae3-3b8d21d2daff.png)


####7.2.3 Batch mode

Unity Editorの下からバッチ処理モードを実行して、ホストサービスを使用することもできます。次のオプションを使用して、コマンドラインからUnityを起動します。

>batchMode -executeMethod UnityEditor.AddressableAssets.HostingServicesManager.BatchMode

これにより、デフォルトのAddressableAssetSettingsオブジェクトからホストサービス構成が読み込まれ、構成されているすべてのサービスが開始されます。
 
代替のAddressableAssetSettings構成を使用するには、独自の静的メソッド
エントリポイントを作成し、
UnityEditor.AddressableAssets.HostingServicesManager.BatchMode（AddressableAssetSettings設定呼び出し）を介して再ロードします。
 
###7.3カスタムサービス

 
ホストサービスは拡張可能であるように設計されており、独自のカスタムロジックを実装して、Addressable Assets Systemからのコンテンツ読み込み要求を処理できます。例えば：
 
>（1）非HTTPプロトコルを使用して内容をダウンロードできることをサポートするカスタムIResourceProvider。
（2）CDNソリューションに一致するコンテンツを提供するために使用される外部プロセス（Apache HTTPサーバーなど）を管理します。

####7.3.1カスタムサービスの実装

HostingServicesManagerは、IHostingServiceインターフェイスを実装する任意のクラスを管理できます（メソッドパラメーターと戻り値の詳細については、APIドキュメントを参照してください。
 
新しいカスタムサービスを作成するには：
1.上記の「新しいホストサービスの構成」セクションにリストされている手順に従いますが、Create>Localhostボタンを選択する代わりに、Create>CustomServiceボタンを選択します。
2.該当するスクリプトをそのフィールドにドラッグするか、オブジェクトセレクタから選択します。このダイアログは、選択したスクリプトがIHostingServiceインターフェースを実装していることを確認します。
3.サービスを追加したら、[追加]ボタンをクリックします。
 
次に、カスタムサービスがServiceTypeドロップダウンに表示されます。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/966c27af-198c-4221-2f2e-f268e9675eca.png)

---
UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、**パフォーマンス分析**と**最適化ソリューション**及び**コンサルティングサービス**を提供している会社でございます。

今なら、UWA GOTローカルツールが**15日間に無償試用**できます！！
よければ、ぜひ！

UWA公式サイト：https://jp.uwa4d.com
UWA GOT OnlineレポートDemo：https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ：https://blog.jp.uwa4d.com