kuront’s blog

主にUnityでのゲーム制作やってます。

【Unity】RPG制作 その25-武器、防具アイテム実装その2 装備画面実装

 今回は武器と防具の装備画面の作成をやっていきます。


装備画面はこんな感じです。

f:id:kuront:20211109025925p:plain

f:id:kuront:20211109025936p:plain

左のグレーの部分がボタンになっており、押すとその部位に装備できる武器・防具がスクロールビューに表示されるように作ります。

まずはじめに、GeneralEnum.csに装備部位の列挙型定数を宣言します。

 


クリックで展開

 PlayerManagerに現在プレイヤーが装備している武器と防具を保持するDictionaryの宣言と、プレイヤーの装備状態の初期化関数を作成します。

 


クリックで展開

WeaponManagerとArmorManagerに、所持装備のDctionaryの空きにEntityを登録する関数と、Dictionaryの指定したIndexの装備を削除する関数、Entityから元Dataを取得する関数を作成します。

 


クリックで展開


 


クリックで展開

装備画面内での処理を行うEquipmentUIクラスを新規作成します。一応コードを全部載せますがめちゃくちゃ長いので流し読みすることをおすすめします。(笑)

 


クリックで展開

以前作成したアイテムのリストを応用して作っています。ざっくり説明すると、装備画面内で装備を変更したい箇所の部位のボタンを押すと、Start関数で実行しているSetEquipButtonListener関数が各々のEquipButtonを押した時に実行させたい関数(所持装備をリストに表示するSetWeaponEntity関数とSetArmorEntity関数)を登録します。
 SetWeaponEntity,SetArmorEntity関数の中で、リスト内の武器及び防具の項目(Buttonコンポーネントを追加している)を押した時の処理も登録しています。登録している関数は、ChangeWeapon関数(もしくはDhangeArmor関数)、DestroyAllItem関数、HideListPanel関数、PermissionEquipButton関数です。
ChangeWeapon及びChangeArmor関数は指定した装備部位の装備を指定した装備に変更する処理です。今回、両手武器と盾の概念を入れたかったので、それぞれ装備した時にうまく機能するために関数内では結構複雑な処理をさせています。ChangeWeapon及びChangeArmor関数は元々装備していた武器を所持装備リストに登録する処理も行います。
DestroyAllItem関数はリストのコンテンツをすべて削除する関数です。これを実行しないと装備部位ボタンを押すたびに所持装備をリストに追加してしまうためおかしなことになります。
 HideListPanel関数は装備一覧のリストを非表示にする関数です。武器及び防具の項目を押して装備変更したらリストを消したいのでこの関数も登録しておきます。
 PermissionEquipButton関数は各EquipButtonの押下ができるようにする関数です。SetWeaponEntity,SetArmorEntity関数の最後で、その部位で装備できる武器もしくは防具が一つでもあればProhibitEquipButton関数を実行するようにしているのですが、これは装備一覧を出しているときは各EquipButtonを押せないようにしたいためです。装備変更を終えたらEquipButtonを押せるようにしたいのでこのPermissionEquipButton関数を登録しておきます。
 更に、外すボタンを押した時の処理も登録させています。関数を登録する前にRemoveAllListenersでイベントをすべて削除します。そして、PushRemoveEquipButton関数、DestroyAllItem関数、HideListPanel関数、PermissionEquipButton関数、DeleatEquipText関数を登録します。PushRemoveEquipButton関数は、指定した装備部位の装備を外す関数で、DeleatEquipText関数は指定した装備部位のテキストを空白にする関数です。
EquipmentUIスクリプトを装備画面のCanvasに貼り付け、インスペクターの各々のオブジェクトを設定して実行すると以下の動画のようになります。

youtu.be


次回は装備による能力値の変化を実装していきます。