【Unity】Addressablesを使用してPrefabをリモートから取得する方法

2024年9月17日

この技術資料では、UnityのAddressablesシステムを利用して、リモートサーバー(例: GitHub Pages)からPrefabを取得し、ゲーム内で動的にロードする方法を解説します。Addressablesは、リソースを効率的に管理し、メモリの最適化やリモートアセットのロードを実現する強力なツールです。本資料は、GitHub Pagesをホスティングサービスとして使用する具体的な手順に基づいています。

対象者

  • Unityを使って開発を行っている開発者
  • Addressablesの使用に興味がある方
  • リモートからアセットを取得する方法を学びたい方

前提条件

本技術資料を利用する前に、以下のツールや知識が必要です。

  • Unity 2021.3 以上(推奨バージョン)
  • GitHubアカウント(GitHub Pagesを利用)
  • インターネット接続(リモートからのアセット取得)
  • UnityプロジェクトにAddressablesパッケージがインストール済み

手順

1. Unityプロジェクトの準備

1.1 Addressablesパッケージのインストール

  1. Unityエディタを開き、「Window > Package Manager」を選択します。
  2. 左側上部のプルダウンメニューで「Packages: Unity Resistry」を選択します。
  3. 検索バーで「Addressables」と入力し、パッケージを見つけてインストールします。

2. Prefabの作成とAddressable化

2.1 Prefabの作成

  1. Unityで新しい3Dまたは2Dオブジェクト(例: CubeやSphereなど)をシーンに作成します。
  2. 作成したオブジェクトをプロジェクトウィンドウ内のAssetsフォルダにドラッグしてPrefab化します。
  3. Prefabがプロジェクトウィンドウに表示されたことを確認します。

2.2 PrefabをAddressableとして設定

  1. プロジェクトウィンドウで、作成したPrefabのインスペクターの上部の「Addressable」をOnにします。
  2. 「Window > Asset Management > Addressables > Groups」からAddressablesウィンドウを開きます。
  3. デフォルトグループ(Default Local Group)にPrefabが追加されていることを確認します。

3. AddressablesのビルドとGitHub Pagesへのアップロード

3.1 Addressablesの設定

  1. AddressablesウィンドウでPrefabが含まれているグループを選択し、インスペクターの「Active Profile: Default」の「Inspect Top Level Settings」をクリックします。
  2. Manage Groups」の「Profiles」の「Profiles in Use」の「Manage Profiles」をクリックします。
  3. Remote」を「Custom」に変更し、「Remote.LoadPath」を設定します。
  • 例: https://username.github.io/repository-name/
  • このURLは後ほどGitHub Pagesからリモートロードされるパスになります。

3.2 Addressablesのビルド

  1. Addressables Groups」タブのメニューから「Build > New Build > Default Build Script」を選択してビルドを開始します。
  2. ビルドが完了すると、ServerDataフォルダ内にビルド成果物(catalog.json.bundleファイルなど)が生成されます。
    ServerDataフォルダの作成場所は、エクスプローラーでプロジェクト本体のフォルダを確認してください)

3.3 GitHub Pagesへのアップロード

  1. GitHubにログインし、新しいリポジトリを作成します。
  2. ServerDataフォルダの内容(catalog.json.bundleファイル)を作成したリポジトリにアップロードします。
  3. リポジトリの設定ページで、GitHub Pagesを有効化します。
  4. リモートロード用のURLを確認し、UnityのRemote Load Pathに正しいURLが設定されているか確認します。

4. Prefabをリモートからロードするスクリプト

次に、リモートからPrefabをロードし、シーンにインスタンス化するためのスクリプトを作成します。

4.1 スクリプトの作成

以下のコードをC#スクリプトとして作成し、任意のGameObjectにアタッチします。

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class AddressablePrefabLoader : MonoBehaviour
{
    // Addressableで設定したPrefabのアドレス(例: "MyPrefab")
    public string prefabAddress = "MyPrefab";

    void Start()
    {
        // Prefabをリモートから非同期でロード
        Addressables.LoadAssetAsync<GameObject>(prefabAddress).Completed += OnPrefabLoaded;
    }

    private void OnPrefabLoaded(AsyncOperationHandle<GameObject> obj)
    {
        if (obj.Status == AsyncOperationStatus.Succeeded)
        {
            // ロードに成功したらPrefabをインスタンス化
            GameObject prefabInstance = Instantiate(obj.Result);
            prefabInstance.transform.position = Vector3.zero; // 初期位置に配置
        }
        else
        {
            Debug.LogError("Prefabのロードに失敗しました");
        }
    }
}

4.2 スクリプトの説明

  • Addressables.LoadAssetAsync<GameObject>(prefabAddress)メソッドは、指定したアドレスからPrefabを非同期でロードします。
  • OnPrefabLoadedメソッド内で、Prefabのロードが成功した場合にシーンにインスタンス化されます。

5. 実行と動作確認

5.1 実行

  1. Unityエディタでシーンを再生します。
  2. GitHub Pages上にホスティングされたPrefabが正しくロードされ、シーンにインスタンス化されることを確認します。

5.2 ログ確認

  • ロードに失敗した場合、コンソールにエラーメッセージが表示されます。URLの設定やアドレス名を再確認してください。

まとめ

本資料では、UnityのAddressablesシステムを使ってPrefabをリモートサーバー(GitHub Pages)から取得する手順を詳しく説明しました。この方法を使うことで、リモートから効率的にアセットを管理・ロードでき、ゲームのメモリ使用量やパフォーマンスを改善することが可能です。

主なポイント

  • アセットの動的ロード: Addressablesを使うことで、必要なときにアセットをロードし、不要になったら解放できます。
  • リモートホスティング: GitHub Pagesのような静的ホスティングサービスを利用して、ゲームのインストールサイズを小さく保つことが可能です。
  • 非同期処理: Addressablesは非同期にアセットをロードするため、ユーザー体験を損なうことなく動的なコンテンツ配信が可能です。

Addressablesの詳細設定や、さらなる実践例については、必要に応じてカスタマイズしてください。


参考資料

Addressable,Unity

Posted by hidepon