概要
AddressableAssetSystemでゲームステージのPrefabをサーバーからダウンロードする流れをまとめます。
詳しい技術的な解説は載せませんが、とりあえず一回手を動かして動作確認してみたい!という方用の記事です。
本文
環境の準備
PackageManagerでAddressablesをインストールします。
今回はゲームステージをダウンロードするテストなのでスクショのようなPrefabを用意しました。テストするだけなら単純にキューブひとつだけでも大丈夫です。
Addressableの準備
Window > Asset Management > Addressables > GroupでAddressables Groupsを開きます。
ウィンドウの中に「Create Addressables Settings」というボタンがあるのでそれを押して開始します。
New > Packed Assetsでグループを新規作成します。生成されたグループ(Packed Assets)を右クリック > Renameで適当なグループ名に変更してください。(今回はRemoteGroupにしました)
PrefabをRemoteGroupにドラッグ&ドロップするとPrefabがAddressableAssetの管理対象に登録されます。(Scene上のゲームオブジェクト類じゃない点にご注意ください!)
続いてRemoteGroupを選択してInspectorを確認します。
Build & Load Pathsを<custom>に変更
Build PathをRemote.BuildPathに変更
LoadPathをRemote.LoadPathに変更します。
Play Mode Script > Use Existing Buildを選択しておきます
ProjectウィンドウからAssets/AddressableAssetsData/AddressableAssetSettings.assetを選択してInspectorを確認します。
Player Version Overrideに適当な文字列を指定します(今回は1にしました)
Build Remote Catalogにチェックを入れます。
次にメニューからWindow > Asset Management > Addressables > Profilesを選択します。
Addressables Profilesウィンドウが表示されますのでRemoteはCustomを選んでRemote.LoadPathにデータをアップロードする予定のサーバーのURLを入力します。アップロードするファイルの親になるフォルダまでを指定したURLになります(URLがまだ決まってなければ後で設定しても大丈夫です)
ビルド
Addressables GroupsでBuild > New Build > Default Build Scriptを選択するとビルドが開始されます。
ビルドで作成されたファイルはここまでの設定の中にあるBuild Pathで指定されたフォルダの中に作成されます。Finderやエクスプローラでプロジェクトのフォルダから今回の例では「ServerData/StandaloneOSX」を辿るとファイルがあります。フォルダの中のファイルをFTPでサーバーにアップロードします。(サーバー上ファイルのパーミッションは644(読み込み専用ファイル)になっていれば正常に動作できると思います)
これでAddressableの下準備ができました。
動作確認
以下のスクリプトを作成してHierarchy上に作成したオブジェクトに貼り付けてください。(AssetReferenceGameObjectにはゲームステージPrefabをドラッグ&ドロップします)
Projectウィンドウ上のPrefab、Addressables Groups上のPrefabどちらでも大丈夫です。
動作確認のためゲームステージPrefabはHierarchy上から消しておきます(実行に合わせてゲームステージが表示されたら成功です)
using UnityEngine;
using UnityEngine.AddressableAssets;
public class AddressableSample : MonoBehaviour
{
[SerializeField] private AssetReferenceGameObject assetReferenceGameObject;
private GameObject _spawnedGameObject;
private void Start()
{
assetReferenceGameObject.InstantiateAsync().Completed +=
(asyncOperation) => _spawnedGameObject = asyncOperation.Result;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// インスタンスをリリースする
assetReferenceGameObject.ReleaseInstance(_spawnedGameObject);
}
}
}
実行するとサーバーからダウンロードされたゲームステージが表示されました。成功です!
スペースキーを押すとインスタンスもしっかりリリースされることが確認できると思います。
もっと詳しく動作確認したいときは
ProjectウィンドウからAssets/AddressableAssetsData/AddressableAssetSettings.assetを選択してInspectorを確認します。
Send Profiler Eventsにチェックを入れます。
メニューからWindow > Asset Management > Addressables > Event Viewerを選択すると
Addressables Event Viewerが表示されます。この画面でメモリの使用状況などを確認することができます。