【Unity】Addressablesを使用してPrefabをリモートから取得する方法
この技術資料では、UnityのAddressablesシステムを利用して、リモートサーバー(例: GitHub Pages)からPrefabを取得し、ゲーム内で動的にロードする方法を解説します。Addressablesは、リソースを効率的に管理し、メモリの最適化やリモートアセットのロードを実現する強力なツールです。本資料は、GitHub Pagesをホスティングサービスとして使用する具体的な手順に基づいています。
目次
対象者
- Unityを使って開発を行っている開発者
- Addressablesの使用に興味がある方
- リモートからアセットを取得する方法を学びたい方
前提条件
本技術資料を利用する前に、以下のツールや知識が必要です。
- Unity 2021.3 以上(推奨バージョン)
- GitHubアカウント(GitHub Pagesを利用)
- インターネット接続(リモートからのアセット取得)
- UnityプロジェクトにAddressablesパッケージがインストール済み
手順
1. Unityプロジェクトの準備
1.1 Addressablesパッケージのインストール
- Unityエディタを開き、「Window > Package Manager」を選択します。
- 左側上部のプルダウンメニューで「Packages: Unity Resistry」を選択します。
- 検索バーで「Addressables」と入力し、パッケージを見つけてインストールします。
2. Prefabの作成とAddressable化
2.1 Prefabの作成
- Unityで新しい3Dまたは2Dオブジェクト(例: CubeやSphereなど)をシーンに作成します。
- 作成したオブジェクトをプロジェクトウィンドウ内のAssetsフォルダにドラッグしてPrefab化します。
- Prefabがプロジェクトウィンドウに表示されたことを確認します。
2.2 PrefabをAddressableとして設定
- プロジェクトウィンドウで、作成したPrefabのインスペクターの上部の「Addressable」をOnにします。
- 「Window > Asset Management > Addressables > Groups」からAddressablesウィンドウを開きます。
- デフォルトグループ(
Default Local Group
)にPrefabが追加されていることを確認します。
3. AddressablesのビルドとGitHub Pagesへのアップロード
3.1 Addressablesの設定
- AddressablesウィンドウでPrefabが含まれているグループを選択し、インスペクターの「Active Profile: Default」の「Inspect Top Level Settings」をクリックします。
- 「Manage Groups」の「Profiles」の「Profiles in Use」の「Manage Profiles」をクリックします。
- 「Remote」を「Custom」に変更し、「Remote.LoadPath」を設定します。
- 例:
https://username.github.io/repository-name/
- このURLは後ほどGitHub Pagesからリモートロードされるパスになります。
3.2 Addressablesのビルド
- 「Addressables Groups」タブのメニューから「Build > New Build > Default Build Script」を選択してビルドを開始します。
- ビルドが完了すると、
ServerData
フォルダ内にビルド成果物(catalog.json
、.bundle
ファイルなど)が生成されます。
(ServerData
フォルダの作成場所は、エクスプローラーでプロジェクト本体のフォルダを確認してください)
3.3 GitHub Pagesへのアップロード
- GitHubにログインし、新しいリポジトリを作成します。
ServerData
フォルダの内容(catalog.json
や.bundle
ファイル)を作成したリポジトリにアップロードします。- リポジトリの設定ページで、GitHub Pagesを有効化します。
- リモートロード用の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 実行
- Unityエディタでシーンを再生します。
- GitHub Pages上にホスティングされたPrefabが正しくロードされ、シーンにインスタンス化されることを確認します。
5.2 ログ確認
- ロードに失敗した場合、コンソールにエラーメッセージが表示されます。URLの設定やアドレス名を再確認してください。
まとめ
本資料では、UnityのAddressablesシステムを使ってPrefabをリモートサーバー(GitHub Pages)から取得する手順を詳しく説明しました。この方法を使うことで、リモートから効率的にアセットを管理・ロードでき、ゲームのメモリ使用量やパフォーマンスを改善することが可能です。
主なポイント
- アセットの動的ロード: Addressablesを使うことで、必要なときにアセットをロードし、不要になったら解放できます。
- リモートホスティング: GitHub Pagesのような静的ホスティングサービスを利用して、ゲームのインストールサイズを小さく保つことが可能です。
- 非同期処理: Addressablesは非同期にアセットをロードするため、ユーザー体験を損なうことなく動的なコンテンツ配信が可能です。
Addressablesの詳細設定や、さらなる実践例については、必要に応じてカスタマイズしてください。
参考資料
- Unity公式ドキュメント(Addressables)
- GitHub Pagesの設定(GitHub Pages公式ドキュメント)
ディスカッション
コメント一覧
まだ、コメントがありません