📘

【Unity, Addressables】MAMPでサーバにした自分のPCからAssetBundleをロードする

2023/08/06に公開

はじめに

Addressablesを利用するとAssetBundleのロード先を柔軟に切り替えることができます。ローカルフォルダから読み込む場合はUnity上で簡単に動作を確認できますが、リモートフォルダから読み込む場合は別途自分でサーバを契約する必要が生まれたりします。自分のPCをサーバとして動かして、リモートでAssetBundleをロードする場合について確認できたら良いなと思い立ちました。

本記事は、MAMPというツールを使って自分のPCをサーバとして動かし、自分のPC上に配置したAssetBundleをAddressablesを用いてロードした記録のメモです。

環境詳細

Windows11
Unity : 2022.3.0f1
Addressables : 1.21.14

やりかたのメモ

まずはMAMPをダウンロードしましょう。
以下のリンクから可能です。
https://www.mamp.info/en/downloads/

インストールが完了したらサーバを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 Hostedcustomeに変更します

Remote.LoadPathを自分のIPアドレスを指定するように変更します。
ここで最初にメモしたipv4のアドレスを使用します。
http://<自分のIPアドレス>/<htdocsより子の、アセットバンドルがあるフォルダまでのパス>
としてください

もしhtdocs直下のRemoteBundlesにアセットバンドルなどを格納するなら、
http://XXX.XXX.XXX.XXX/RemoteBundles

次にAddressable Asset SettingsAddressableAssetsDataフォルダから探して選択します

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

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

Build & Load PathsRemoteを選択してください

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

Addressables Groupsが現れます

PlayModeScriptをUse Existing Buildに変え、

ビルドを実行します

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

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

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

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

参考文献

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

Discussion