【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