Unityで現在装備している武器のスロットがわかるようにする

今回は前回までに作成した武器の装備スロットに追加機能を加えます。
単純に記事が長すぎて追加するのを忘れていたというのが本当ですが・・・。

この記事の機能を追加するには、持ち物画面に装備している武器のスロットが表示されている事が条件になります。
まだの方は

持ち物画面で装備スロットに装備品を入れる機能をUnityで作る
Unityの持ち物画面で装備スロットにマウスのドラッグ&ドロップで武器を設定出来るようにします

を参考にしてください。

装備スロットの表示まで終わっている方にとっては難しい処理の追加はありません。
装備の切り替えが起こったら、装備スロットの背景の色を変更してやるだけです。

スポンサーリンク

SetEquipSlotStatusにスロットの背景色を変更する関数を加える

まずは装備スロットに設定しているSetEquipSlotStatusに関数を加えます。

ChangeColor関数はint型の引数を1つ取ります。
受け取った番号によってスロットの背景色を変更します。

受け取る番号は0~4の値で、0は素手に、1~4は押したキーと対応しています。
装備スロットは0~3に対応しますので、受け取る番号を-1ずつしたものと装備スロットが対応しています。(ちょっと混乱します)

まずは0番を受け取った時は装備を外し、素手になるので、obj[i](スロットのオブジェクトが入っている)のUI.Imageを取得し、その色を変更します。
色を変更する時はColor.redと色をそのまま指定していましたが、これだとアルファ値(透明度)の指定が出来ません。

そこで、Color型のオブジェクトを作成し、細かい数値を指定して新しい色を作成します。

new Color(1, 1, 1, 100.0f / 255.0f);

new Color(赤, 緑, 青, 透明度)となっていて、それぞれ0~1の間で数値を指定します。
例えば透明ではない赤色を指定したい場合は

new Color(1, 0, 0, 0)

となります。今回は0を受け取った場合は装備スロットの背景をすべて白の透明度が100のものを作成したいので、

new Color(1, 1, 1, 100.0f / 255.0f)

となっています。透明度は元々が100となっているので、その値を0~1の間に収める為に100.0fを255.0fで割っています。
intで100/255とすると値が0になってしまう為、わざわざ小数点とfをつけてfloat型の計算にしています。

受け取った値が1~4の場合はiの値が(受け取った値 – 1)と同じ時は赤、それ以外は白にして、色を変更します。
-1をしているのは先ほど説明にあったとおり押したキーと装備スロットの配列の番号との差異を考慮した為です。

これで装備スロットの色を変更する処理ChangeColorが完成したので、次はこの関数を呼び出す場所を加えます。

スロットの背景色を変更するタイミングである装備変更スクリプトChangeEquipの修正

装備スロットの色を変更する必要があるのは装備を変更した時なので、装備変更スクリプトChangeEquipスクリプト内に
呼び出す処理を加えます。

上のスクリプトはChangeEquipスクリプトのUpdate関数内の処理の一部です。
押されたキーによってequipにその値を入れて、SetEquipSlotStatusのChangeColor関数を呼び出す時にequipを渡します。

これで現在装備している武器のスロットがわかるようにする事が出来ました。
Unityの実行ボタンを押して確認してみましょう。

equipslot1

上のように装備している装備スロットの背景色が変更されるようになりました。
装備スロットには何も装備していないので、アイコンが表示されていません。

アイコンが特定のどの武器を装備しているか?まではわかりませんが、ある程度どんな種類の武器を装備しているかがわかります。

どうしても特定の武器のアイコンにしたいという場合は無理やりですが、Assetsエリアの特定の武器をPrintScreenやSnippingTool
等を利用して画像を保存し、それをスプライトに変更してそれをアイコンとして使うという手もあります。

画像のサイズは同じサイズにしないと変になってしまいますが・・・。

追記内容の概要

--以降追記--

現在装備している武器がわかりやすくなった事で、新たに修正する必要が出ました。
何も装備していない時に例えば1のキーを押し1の何もないスロットを選択していたとします。

その後、持ち物画面に以降して、スロット1に何かしらの武器をドラッグ&ドロップします。
それからゲーム画面に戻ると、スロット1に武器は表示され装備しているはずですが、キャラクターは何も持っていません。

これでは困るので持ち物画面で装備スロットに武器がドロップされた時点でキャラクターの武器を交換しておきます。

装備切り替えスクリプトChangeEquipの修正

通常のキーを押して装備を切り替える処理と装備スロットに武器がドロップされた時の処理は同じなので、外部から装備切り替えスクリプトChangeEquipが呼ばれた時にも対応できるようにChangeEquipを修正します。

武器の切り替えをしていた部分をChange関数にまとめ、武器が銃だった時の後処理SetDisableGunと武器のOn・Off用にChangeActiveを用意します。

ChangeActiveは外部からChange関数を呼び出して武器を変更する前に、今装備している武器を非アクティブにして見えないようにする処理です。

うまく切り分けられなかったので、多少変なスクリプトになっていると思います。

装備スロットに武器がドロップされた時の処理スクリプトProcessEquipSlotの修正

装備スロットに武器がドロップされた時に呼ばれるスクリプトはProcessEquipSlotです。
このスクリプト内を修正します。

SetEquipSlotStatusスクリプト内のIsChangeColorは装備スロットの背景色が変更されているかどうかの判定です。
これは後で記述します。

まず、今装備していた武器が銃だった時はそれ用の後処理をし、武器を非アクティブにします。
その後Change関数にスロット番号に1を足した値を渡し武器を変更します。

背景色が変更されているかどうかを確認する関数IsChangeColor

以下がIsChangeColorの関数です。

背景色が赤色であればtrue、それ以外はfalseを戻り値にして返します。

これで最初何もないスロットを装備している状態で、持ち物画面にいき、そこで装備スロットに武器をドロップしてゲーム画面に戻っても、武器を装備している状態になります。

うーむ・・・持ち物画面を最初から見ていっても解りづらいなぁ・・・・(^_^;)