【Unity】RPGを作るチュートリアルその25 Addressablesの導入

【Unity】RPGを作るチュートリアルその25 Addressablesの導入

シンプルな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を開くのだポッター
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がいくつになっているか保持する仕組みを作っていきましょう。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!