【Unity, Addressables】MAMPでサーバにした自分のPCからAssetBundleをロードする
はじめに
Addressablesを利用するとAssetBundleのロード先を柔軟に切り替えることができます。ローカルフォルダから読み込む場合はUnity上で簡単に動作を確認できますが、リモートフォルダから読み込む場合は別途自分でサーバを契約する必要が生まれたりします。自分のPCをサーバとして動かして、リモートでAssetBundleをロードする場合について確認できたら良いなと思い立ちました。
本記事は、MAMPというツールを使って自分のPCをサーバとして動かし、自分のPC上に配置したAssetBundleをAddressablesを用いてロードした記録のメモです。
環境詳細
Windows11
Unity : 2022.3.0f1
Addressables : 1.21.14
やりかたのメモ
まずはMAMPをダウンロードしましょう。
以下のリンクから可能です。
インストールが完了したらサーバをMAMPから起動します。
サーバが起動中に、以下のhtdocsフォルダへとアクセスできることになります。
後ほど、htdocs以下のフォルダにAsset Bundleを格納します。

次にコマンドプロンプトから現在のipv4アドレスを確認します。
ipconfigと打ち込み、出てきたipv4アドレスをメモっときましょう。
その後、AddressablesをPackage Managerからインストール

適当なシーンを開く

適当にゲームオブジェクトを生成

プロジェクトウィンドウにD&Dでプレファブ化しておきます

このとき、Addressableにチェック入れときましょう

以上が完了したら元のシーンからゲームオブジェクトは削除します

シーンにLoaderというオブジェクトを配置し、LoadAssetBundleというスクリプトをアタッチ

スクリプトの内容は以下です。((1)を参考にしました)
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class LoadAssetBundle : MonoBehaviour
{
[SerializeField] AssetReferenceT<GameObject> assetReference;
GameObject cube;
async void Start()
{
AsyncOperationHandle<GameObject> operationHandle = assetReference.InstantiateAsync();
cube = await operationHandle.Task;
}
void OnDestroy()
{
assetReference.ReleaseInstance(cube);
}
}
Inspectorから先程作成したcubeを割り当てておきます

ここからアセットバンドルをビルドしていきます。
その前にまず、プロファイラからいくつか設定をしましょう。
Windowから以下のように展開し、Prorilesを選択します

RemoteのEditor Hostedをcustomeに変更します

Remote.LoadPathを自分のIPアドレスを指定するように変更します。
ここで最初にメモしたipv4のアドレスを使用します。
http://<自分のIPアドレス>/<htdocsより子の、アセットバンドルがあるフォルダまでのパス>
としてください
もしhtdocs直下のRemoteBundlesにアセットバンドルなどを格納するなら、
http://XXX.XXX.XXX.XXX/RemoteBundles
次にAddressable Asset SettingsをAddressableAssetsDataフォルダから探して選択します

Build Remote Catalogにチェックを入れ、Build & Load PathsはRemoteを選択します

また、AddressableAssetsData/AssetGroupsから、Default Local Group を選択します

Build & Load PathsはRemoteを選択してください

以上が完了したならばアセットバンドルのビルドを始めましょう。
Window から以下のように展開し、Groupsを選択します

Addressables Groupsが現れます

PlayModeScriptをUse Existing Buildに変え、

ビルドを実行します

ビルドしたアセットバンドルはServerData/StandaloneWindows64というフォルダに格納されます。ビルド設定を他のプラットフォームに設定している場合は、該当するフォルダ名のフォルダに格納されていると思います。

プロファイラで指定したフォルダに、StandaloneWindows64に格納されているファイルを全部移します。

最後に、HTTPによる通信をUnity側で許可してあげましょう。
ProjectSettingsを開き、PlayerからAllow download over HTTPをAlways allowedに設定します。

これで、AddressablesからAssetBundleを、自分のPCをサーバとしてロードし、インスタンス化することができました。

参考文献
(1) https://synamon.hatenablog.com/entry/introduction-to-addressable-asset-system#Addressables-Groups
Discussion