Unity の Addressables でリモートアセットを利用する
※ これは 2022/07/28 時点の Unity 2022.1.11f1 Addressables v1.20.3 Windows 11 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回に引き続き Addressables で、今回は CDN などに配置する想定のリモートアセットを使ってみたい

まずは Addressables Groups のウィンドウの Profile コンボボックスから Manage Profiles を選択

Remote の欄を Custom にして、Remote.LoadPth に http://localhost/[BindingTarget] と入力

これが配信サーバーのエンドポイントになる
次に Addressables の Settings を開き、Catalog のグループの中の Player Version Override に 1.0.0,Build Remote Catalog をオン、Build Load Paths に先ほどの Profile の Remote を指定、Only update catalogs manially をオンにして自前でカタログを更新するようにする

Addressables Groups のウィンドウに戻り、New のコンボボックスから Packed Assets を選び、追加された Group の名称を Remote Group にする

Remote Group の設定は下記の通り

Build & Load Paths は Remote、Asset Bundle Compression は容量を削減するため LZMA、Bundle Mode はラベルごとにアセットバンドルを分ける Pacl Together By Label、Content Update Restriction はオフになっていることを確認
Addressables Group のウィンドウにて cat.png を Default Local Group から Remote Group に移動

ここでアセットをビルドし直す

次に配信サーバーの構築
Apacahe などを利用してもよいが Windows の場合は IIS を使うのが早いので IIS を立てる
Windows のタスクバーの検索より、OptionalFeatures を検索して実行

「Windows の機能の有効化または無効化」のダイアログが開くので、「インターネット インフォメーションサービス」にチェックを入れて「OK」ボタン押下

さらに Windows のタスクバーの検索より、IIS を検索して実行

「インターネット インフォメーションサービス マネージャー」が開くので、Default Web Site を選択し、Mime の種類 を押下

.hash を text/plain で追加し

さらに .bundle を application/octet-stream で追加する
Unity のプロジェクトディレクトリの ServerData に StandaloneWIndows64 のディレクトリができているはずなので、これを丸ごと C:/inetpub/wwwroot の IIS のドキュメントルートにコピーする

最後に Unity の Player Settings の Allow downloads over HTTP をオンにして http 通信を有効にする

あとは Test.cs を下記のように変更
using System.Linq; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class Test : MonoBehaviour { [SerializeField] private Image thumbnailImage = null; private AsyncOperationHandle<Sprite> handle = default; public async void Start() { // Addresables 初期化 await Addressables.InitializeAsync().Task; // リモートカタログに変更があれば更新する var catalogs = await Addressables.CheckForCatalogUpdates(true).Task; if (catalogs != null && catalogs.Count > 0) { var locators = await Addressables.UpdateCatalogs(catalogs, true).Task; } // Addressables 経由で Sprite を読み込んで表示 this.handle = Addressables.LoadAssetAsync<Sprite>("Assets/Sprites/cat.png"); this.thumbnailImage.sprite = await this.handle.Task; } public void OnDestroy() { // いらなくなったら handle を Release する Addressables.Release(this.handle); } }
Addressables の初期化とカタログの更新処理を入れただけ
これで今までの埋め込みと同じような挙動で配信サーバーからダウンロードするようになるはず

できたできた