今回は、初心者にも優しい簡単なアイテムリストの作り方について紹介します。
前の記事同様に、現在制作中のFPSを例にとって作っていきます。
一番シンプルなアイテムリストの作り方
前回の記事で、自動的に拾った装備に切り替える機能を実装しました。今回はその仕様を変更して拾った装備を一旦アイテムリストの中に格納するようにします。
まずは、Canvasを用意してPanelを表示させます。
色合いは、優しめの緑にしていますが、好きな色に変更してもらって構いません。
オブジェクトの親子関係は、上の画像を参考にしてください。
装備品の画像を並べていますが、これはImageではなくButtonを配置しています。
ButtonのSource Imageにアイテムや装備品の画像を設定しましょう。また、各Buttonのテキストは空にしておいてください。
パネルの上には装飾として何のリストなのかをテキストを使って表示すると良いでしょう。画面下にはリストを閉じるためのボタンも用意しておきます。
Playerスクリプトの修正
FPSControllerにアタッチしていたPlayerスクリプトを変更します。
「i」キーが押されたら、先ほど準備したアイテムリストのパネルを開くようにします。
落ちているアイテムを取得したら、タグで識別してリスト内に取得したアイテムのボタンをリスト内に表示させるようになります。
作成したスクリプトをFPSControllerにアタッチします。インスペクターから各ボタンをアウトレット接続します。EquimentPanelは先ほど作ったパネルの事ですね。
アイテムリストが表示されていて、動き回れる状態を避けるために、FPSControllerも非表示にするようにしてみます。
この時点では、アイテムリストが開くだけですね。私の場合は、試験的にUMPを配置しているので、各々指定したアイテムを拾った際にアイテムリストが更新されるか確認しましょう。
その装備を使うのかどうかの確認画面を作る
アイテムリストから、装備を変える際の確認画面をパネルで作成します。
名前は「weaponchangePanel」にしました。
パネルの上に「はい」と「いいえ」のボタンを配置しましょう。はいを押したらその装備に変更するようにして、いいえならパネルを閉じるようにします。
アイテムチェンジのスクリプトを作成する
新規スクリプト「Weaponchange」を作成します。
装備の種類が増えた時の事を考えて、アイテムのマネージャースクリプトを作って、そこにどの装備に変更しようとしているのかを管理するようにします。
UMPボタンを押したら、「UMP」という文字列をマネージャースクリプトに引き渡して、この後作成する「はい」ボタンをクリックした際のスクリプトから装備品を判別します。
作成したスクリプトをUMPButtonにアタッチします。
マネージャースクリプトの作成
新規スクリプト「ItemManager」を作成します。
といっても、パブリックのstring型で宣言するだけです。
空のオブジェクト「ItemManager」を作ってアタッチします。
UMPButtonのインスペクターから変更確認パネルとitemManagerを設定しておきます。
どのアイテムか識別するチェックスクリプトを作成
どの装備品なのかをチェックする「Check」スクリプトを新規作成します。
「はい」ボタンが押されたら、 どの装備に変更しようとしているのかをアイテムマネージャーから取得した文字列でチェックします。
後は、変更対象となる装備をsetActive(true)で表示させて、元々の装備を非アクティブにすればOK。
「はい」「いいえ」いずれのボタンを押しても、変更確認画面は閉じるようにしましょう。
スクリプトを保存したら、「はい」「いいえ」ボタンにアタッチします。
「はい」ボタンのインスペクターは上の画像のように設定します。装備品は、予めシーンビューに配置していたものを設定しましょう。
「いいえ」ボタンは、パネルを閉じるだけなので、パネルをアウトレット接続するだけで良いです。
「閉じる」ボタンが押された際の処理
蛇足ですが、アイテムリスト内「閉じる」ボタンが押された際の処理も一応。
「Close」などで新規スクリプトを作って上の画像のようにします。
閉じるボタンを押した際に、FPSControllerをアクティブにします。
FPSControllerを使用しているとデフォルトではカーソルが非表示になるので、FPSControllerを選択した状態で「First Person Controller」の「Lock Cursor」のチェックを外します。
ゲームを実行するとこんな感じになります。指定した装備に変わっていればOKです。
「はい」ボタンを押した時点で全ての画面を閉じるパターンもありかも。