【Unity】RPGを作るチュートリアルその29 アイテムの管理クラスを実装

【Unity】RPGを作るチュートリアルその29 アイテムの管理クラスを実装

シンプルなRPGをUnityで作るチュートリアルシリーズの29回目です。

第28回ではキャラクター全体の状態を管理するクラスを追加しました。

今回は定義データを管理するクラスとして、アイテムデータの管理クラスを追加したいと思います。Addressablesを使ったデータのロード、ID指定によるアイテムデータ取得の機能などを実装していきます。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回はキャラクター全体の状態を管理するクラスを追加しました。

 

アイテムデータを管理

今回のチュートリアルではアイテムデータの全体数が少ないので、ゲーム開始時にAddressablesでラベルをつけたアイテムデータを一括ロードして、それをstaticなクラスでリストとして保持するようにしたいと思います。

本番運用でアイテムの定義データ数が多くなって、ずっと保持しているとメモリ使用率が大変……という場合は、必要なタイミングでロードするようにするのも良いかと思います。戦闘中は所持アイテムのデータのみロードする、なんて形などです。必要な時に必要なデータがロードされている状態を実現できればOKで、その上でメモリの使用率もチューニングしていけると良いかもしれません。

Addressablesのパッケージを配置する場所も大切で、ローカルの場合はほぼ遅延なくロードできますが、サーバに配置した場合はネットワークを使ってパッケージをダウンロードしてメモリにロードする関係で、その時間に応じた遅延が発生します。そのため、実際にデータを使う時には、ロードの完了を待つことも必要かもしれません。あるいは、アイコンなどロードに時間のかかる部分は後で表示する処理を入れるのもよくあります。

今回のチュートリアルではAddressablesのパッケージは全部ローカルに配置するので、おそらく1フレームでロードは終わるかと思います。

 

アイテムデータを管理するクラスの実装

Projectウィンドウの「Assets/Scripts」のフォルダにて、空のスクリプトファイルを作成します。名前は [ItemDataManager] にしました。

スクリプトファイルの作成
スクリプトファイルの作成

 

作成した「ItemDataManager」の中身は以下のように記載しました。

フィールドとしては読み込んだアイテムデータを保持するリストを用意しています。

LoadItemData()」のメソッドでは「Addressables.LoadAssetsAsync」を使って指定したラベルのアセットをロードしています。ロードは非同期で行われて、awaitの部分で待っています。awaitを使っているので、メソッドの型の前にasyncをつけています。ロードが終わったらフィールドのリストにアイテムデータをセットしています。

このメソッドはゲームの起動処理の中で呼んで、データをロードしておく想定です。

「GetItemDataById()」のメソッドは指定したIDでアイテムデータをロードし、「GetAllData()」のメソッドはロード済みのアイテム全てを返しています。基本的にはIDで指定する「GetItemDataById()」のメソッドを使っていく想定です。

 

スクリプトを保存してコンパイルエラーがなければ今回は完了です。

 

今回のブランチ

 

まとめ

今回はアイテムデータの管理クラスを作成しました。

次回は引き続き定義データの管理クラスとして敵キャラクターの管理クラスを作成していきましょう。

 

     

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

CTA-IMAGE

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


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


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