UnityのUIで銃の残り弾数の表示をする

今回はUnityで銃の弾の残数を画面上に表示する機能を作ります。

ガンシューティングのゲーム等で銃を使っている場合、弾の数があるうちは発砲出来ます。
しかし画面上に弾の数が表示されていなければ、あと何発打てるのかわかりません。

そういった事がないようにUIを使って弾の数を表示します。

弾数が常に表示されていれば弾の使いどころがはっきりします。
弾の数が0になったら発砲の処理はせず、弾がない事を表す音声を鳴らします。

表示はスクリーンの上にUIとして作成するので常に同じ位置に表示されます。

弾を撃つ処理は

Unityでバイオハザード風ガンシューティングの機能を作ってみる
Unityでバイオハザード風のガンシューティングの機能を作成していきます。今回は銃を構えそこからレーザーポインタを表示するようにし敵に当たっている時に攻撃ボタンを押すと敵にダメージを与えます。

で作成しているので参考にしてください。

それでは弾の残りを画面に表示する機能を作成します。

スポンサーリンク

弾の弾数をUIで表示する

その前に弾をどれだけ持っているかの情報が必要になりますので、キャラクターのステータスを管理しているスクリプトに持っている弾の数という情報を加えます。

private var numberOfBullet : int;

と宣言し、主人公が持っている弾の数の情報を持たせます。
とりあえずStart関数内で弾の数を10に設定しておきます。
public変数で初期値を変更出来るようにしてもいいと思います。

次に弾の数のSetterとGetterを用意し、値の設定と取得を出来るようにしておきます。
銃を撃った時や弾を手に入れた時にSetNumberOfBullet関数を経由して持っている弾の数を変更することになります。

それではUIを作っていきます。

まずはヒエラルキー上で右クリック→UI→CanvasでCanvasを1つ作成し、UI→PanelでPanelを2つ、
UI→Imageを1つ、UI→Text1つ作ります。

バレット1

↑のような階層で作成していきます。Textは名前をかえて、kakeruとThe Numberに変更します。

CanvasのRenderModeはScreen Space Overlayを選択します。
これで画面の上にUIが表示されます。

PanelはCanvas内に作る領域でその中にImageやTextを配置します。

バレット2

階層の一番上のPanelは弾の数を表示する大元の領域にします。

AnchorsをクリックしShiftキーとAltキーを押しながらbottom stretchにします。こうすることで横の幅はスクリーンサイズによって柔軟にサイズを合わせ、必ずスクリーンの下に張り付くようになります。
領域の高さは50に設定しておきます。

Ryacast Targetのチェックを外し、ColorをクリックしてAlphaを0にします。すると領域が透明になります。
そのPanelの子要素のPanelも変更します。

バレット3

AnchorsをShiftキーとAltキーを押しながらmiddle rightを選択します。Widthを150、Heightを50に設定します。
こちらもColorのAlphaを0にし透明にします。

最初のPanelの領域がパラメータを表示する領域でその子要素のPanelが弾の数に関する領域になります。

次に子のPanelの子要素のImage、kakeru、The Numberをそれぞれ変更します。

バレット4

Imageには表示するアイコンを指定します。今回の場合弾の数のアイコンなので弾丸のアイコンを指定しました。
これはAnchorsをmiddle leftにし、Width、Heightともに50に設定します。

バレット5

multiply(kakeru)はただ「×」という文字を表示するだけです。
Anchorsをmiddle centerに設定します。

バレット6

最後が弾の数を設定するテキストです。
Anchorsをmiddle rightにします。

バレット7

上が実際に設置したサンプルです。わかりやすく色をつけていますが、ここは本来Alphaを0にし透明にします。

これで弾の残りを表示する事が出来るようになりました。

弾の数を減らす処理をスクリプトに追加する

では銃を撃った時に弾の数を減らしていくスクリプトを作成します。
主人公キャラクターの動作を設定しているMoveスクリプト(銃を撃った時の処理を記述しているスクリプト)を改良します。

弾が残っていたら

status.SetNumberOfBullet(status.GetNumberOfBullet() – 1);

で銃を撃った時にキャラクターのステータスの銃の数を減らします。
弾がなかった場合はShotスクリプトにあるNotBulletSE関数で弾がなかった時の効果音を再生させます。

ShotスクリプトのNotBulletSEはpublic変数で設定したAudioClipを鳴らす処理をするだけです。

最後に弾の数を更新するCountBulletスクリプトを作ります。

Update関数で常にキャラクターステータスの弾の数を取得し、前回と弾の数が違った場合に、テキストの値を書き換えます。

常に確認しなくても、Moveスクリプト内で弾を撃った時の処理がある場所でCountBullet内のテキストを更新する処理を作り、それを呼び出せば出来ます。
常に確認すると処理が遅くなる可能性もあるので、そういった場合は考慮した方がよさそうです。

バレット8

上のように弾の数が表示され打つたびに減っていくようになりました。

次回は敵キャラクターのHPを頭上に表示するUIを作成します。