※ これは 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 の初期化とカタログの更新処理を入れただけ
これで今までの埋め込みと同じような挙動で配信サーバーからダウンロードするようになるはず
できたできた