【Unity】RPGを作るチュートリアルその25 Addressablesの導入
- 2025.02.23
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルなRPGをUnityで作るチュートリアルシリーズの25回目です。
第24回ではキャラクターの定義データを作成しました。
今回は各定義データを管理する仕組みの準備として、Addressablesを導入して、定義データをグループごとに分けていきたいと思います。
制作環境
MacBook Pro 2023 Apple M2 Max
Unity6 (6000.0.30f1) Silicon
作業内容と順序
シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。
チュートリアルの一覧
このシリーズ全体の一覧は以下のページにまとめています。
前回の内容
前回はキャラクターの定義データを作成しました。
Addressablesとは
Addressablesとは、Unityのアセットを管理するためのパッケージで、実行時にアセットをロードしたり、使っていない時にリリースしたりしてくれます。アドレスを使ってアセットを読み込むことができて、アプリ本体に同梱されていても、サーバにアセットを配置していても見つけてロードしてくれます。(配置先がどこなのかの設定などは必要)
UnityのチュートリアルだとResources.Loadなどを使うことが多かったりしますが、Unity公式では本番環境でResourcesはあまり使わないでね、と言っていたりするので、Addressablesを使って実装するのが無難です。Resourcesはプロトタイプなら有用、とも書かれています。
Resourcesフォルダに配置したアセット類はゲーム起動時に全部読み込まれるので、簡単にアクセスできるメリットがある反面、本番のアプリケーションだと量が多くなりがちで、起動時間がとても長くなってしまいます。そのため、必要な時にロードする仕組みのAddressablesが推奨されています。
今回のチュートリアルでは本番リリースを見越してAddressablesで実装していきます。具体的にはこれまで作成した定義データや、この後導入するであろうオーディオ類などをロードできるようにしたいと思います。
Addressablesのインポート
プロジェクトにAddressablesのパッケージをインポートしていきましょう。画面上部のメニューバーから [Window] -> [Package Manager] を選択してPackageManagerを開きます。

PackageManagerウィンドウでは左側のタブから「Unity Registry」を選択し、パッケージ名の中から「Addressables」を選択します。画面右側の領域で表示される [Install] をクリックしてインストールします。

インストールが完了するとパッケージ名の右側にチェックマークが付きます。

Addressablesの設定
続いてAddressablesの設定を行なっていきます。画面上部のメニューバーから [Window] -> [Asset Management] -> [Addressables] -> [Groups] を選択してAddressablesのウィンドウを開きます。

Projectウィンドウからアセットファイルをドラッグ&ドロップして使うことを考えているので、Projectウィンドウがあるエリア以外の部分に「Addressables Groups」のタブをドラッグ&ドロップしておきます。私はGameウィンドウの右側に配置してみました。Inspectorウィンドウと同じエリアに配置したり、Hierarchyウィンドウと同じエリアに配置したりと、普段のご自身の使い方に合わせて、使いやすい場所に配置するのが良いかと思います。

Addressables Groupsのウィンドウでは [Create Addressables Settings] のボタンをクリックして設定ファイルを作成します。保存先は自動的に選択されます。

設定ファイルを作成すると以下のようにグループが表示されるようになります。デフォルトのグループとして「Default Local Group (Default)」が存在していますが、今回はカテゴリに合わせてグループを作っていきたいと思います。コンテキストメニューを開き、[Create New Group] -> [Packed Assets] からグループを作成します。

作成したグループの上でコンテキストメニューを開くと [Rename] のメニューがあるので、ここから名前を変更していきましょう。ゆっくり2回クリックするか、エンターキーを押しても変更できます。(Macの場合)

作成するグループは4つで、以下の表のように名前をつけました。
グループ名 | 用途 |
Character | 味方キャラクターに関するアセットのグループ |
Enemy | 敵キャラクターに関するアセットのグループ |
Item | アイテムに関するアセットのグループ |
Magic | 魔法に関するアセットのグループ |
グループを作成したら、グループの中にアセットをドラッグ&ドロップしていきます。まずはキャラクターに関連するアセットをグループに入れていきます。Projectウィンドウの「Assets/Data」フォルダに移動して、「CharacterData」、「ExpTable」、「ParameterTable」の3つの定義データをグループにドラッグ&ドロップします。
ドラッグ&ドロップした後は、アドレス名をシンプルにするため、グループ内のアセットを選択した状態でコンテキストメニューを開き、[Simplify Addressable Names] を選択します。複数選択で一括で適用することもできます。これによってパスではなくデータ名で表示されるようになります。今回のフォルダ構成だとシンプルにしてあるのでパスが短いのですが、ゲームの規模が大きくなるとフォルダが深くなってパスが長くなり、ファイル名まで表示されないケースもあるため、個人的に扱いやすいデータ名だけで表示するようにしています。

続いて、アセットにラベルを設定していきます。Addressablesで登録したアセットは、アドレスで読み込んだり、ラベル単位で読み込んだりと複数の読み込み方でロードできます。今回は敵キャラの一覧、アイテムの一覧、という形で同じカテゴリのデータをまとめて読み込みたいので、ラベルを使ってロードするようにしましょう。
ラベルを作るには、グループ内のアセットの右側にあるラベルのプルダウンをクリックして、[Manage Labels…] を選択します。

ラベル追加のウィンドウでは、[+] ボタンをクリックするとラベルを追加できます。「Label Name」の項目に追加したいラベル名を入れ、[Save] ボタンをクリックすることで追加されます。

今回追加したいラベル名は以下の表の通りです。
ラベル名 | 用途 |
Character | キャラクターの定義データをロードする |
ExpTable | 経験値表の定義データをロードする |
ParameterTable | キャラクターのパラメータ表の定義データをロードする |
Enemy | 敵キャラクターの定義データをロードする |
Item | アイテムの定義データをロードする |
Magic | 魔法の定義データをロードする |
追加が完了したらラベル管理のウィンドウを閉じて、再びアセットのプルダウンをクリックします。すると追加したラベルが表示されるので、データに対応するラベルを選択します。画像ではキャラクターの定義データである「CharacterData」を選択していて、[Character] のラベルを選択しました。

他のグループに関してもデータをドラッグ&ドロップしていきましょう。以下の画像では敵キャラクターの定義データをグループに含めました。アドレス名をシンプルにするときと同様に、ラベルの設定も複数選択で一括で設定できます。

アイテム、魔法に関しても同様にグループへのドラッグ&ドロップと、ラベルの設定を行います。以下の画像は設定が完了した後の様子です。

ラベル名をコード内で定義
コード内でラベルを使ってアセットをロードしていくにあたって、ラベル名も定義値のクラスで定義しておきたいと思います。若干原始的な気もしますが、ラベルという大きな括りなら変更もそんなに発生しない想定なので、文字列で定義しておきます。
Projectウィンドウの「Assets/Scripts/Consts」のフォルダにて、空のスクリプトファイルを作成します。名前は [AddressablesLabels] にしました。

作成した「AddressablesLabels」の中身は以下のように記載しました。
コード内ではこの定義値を使ってラベル単位でロード予定です。もしラベル名が変わったとしても、このクラスの値を変えればOKなので多少は影響も減らせます。
今回はまだ動作確認はできないので、スクリプトを保存してコンパイルエラーなどがなければ完了です。
今回のブランチ
まとめ
今回は作成した定義データを管理する仕組みとしてUnityのAddressablesを導入しました。また、定義データをグループ分けし、ラベルでロードできるように準備を行いました。各カテゴリのデータをロードする際には今回の設定を使っていきます。
次回はキャラクターの実行中の状態を保持するクラスを作成していきます。定義データでは最大HPや最大MPを定義していますが、現在のHPやMPがいくつになっているか保持する仕組みを作っていきましょう。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその24 キャラクターの定義データを作成 2025.02.21
-
次の記事
【Unity】RPGを作るチュートリアルその26 実行時のキャラクターの状態を保持 2025.02.24
コメントを書く