UnityのガンシューティングゲームのUIで銃の残り弾数の表示をする

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

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

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

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

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

弾を撃つ処理は

Unityでバイオハザード風ガンシューティングの機能を作ってみます。今回は銃を構えた時にレーザーポインターの表示とシューティングポイントの表示、銃を撃った時に光を表示してみたいと思います。

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

今回作成する弾の残り弾数の表示UIと弾の数の処理を追加すると

↑のような感じのものが作成出来ます。

ガンシューティングゲームが段々出来上がってきましたね。(^^)/

スポンサーリンク

弾の弾数をUIで表示する機能の作成

それでは弾の弾数を表示する機能を作成していきます。

弾の情報を追加する

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

と宣言し、主人公が持っているハンドガン用、ショットガン用の弾の数の情報を持たせます。

次に武器のステータス情報を保持しているWeaponStatusスクリプトを修正します。

weaponTypeフィールドはstring型で定義していましたが、列挙型でWeaponTypeを作り、WeaponType型に変更します。

武器のプレハブでWeaponTypeを選択し直します。

またShotスクリプト等で文字列で武器のタイプを比較していた部分をWeaponTypeで比較するようにします。

主人公操作スクリプトPlayerを修正します。

↑のようにWeaponTypeで比較するように変更しました。

次にMyStatusスクリプトで弾の数を設定したり返したりするメソッドを追加します。

弾の数のSetterとGetterを用意し、値の設定と取得を出来るようにしておきます。

銃を撃った時や弾を手に入れた時にSetNumberOfBullet関数を経由して持っている弾の数を変更することになります。

弾の表示用UIの作成

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

まずはヒエラルキー上で右クリック→UI→CanvasでCanvasを1つ作成し名前をStatusUI、その子要素にUI→Panelを選択し名前をStatusPanel、その子要素にPanelを作成しBulletPanel、その子要素にUI→Imageを作成しBulletImage、UI→Textを作りKakeruText、UI→Textを作りNumTextとします。

ステータス用のUIを作成

↑のような階層で作成していきます。

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

StatusPanelはキャンバスの下の方にサイズを小さくして配置し、その子要素のBulletPanelはさらに小さくします。

ステータス表示用キャンバス

↑のようなサイズにしました。

BulletImageの設定は

弾のイメージ画像

↑のようにBulletPanelの左側に表示します。

BulletImageに使用したアイコンはAssetStoreでテクスチャ&マテリアル→アイコン&UI→64 Flat Game IconsのInventory Bulletを使用します。

KakeruTextは×という表示をするだけです。

×表示用テキスト

↑のようにBulletPanelの真ん中に表示します。

NumTextの設定は

弾の数を表示するテキスト

↑のようにBulletPanelの右側に表示します。

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

では銃を撃った時に弾の数を減らしていくスクリプトを作成します。

銃を撃つ処理を担当しているShotスクリプトに処理を記述します。

Playerスクリプトで銃を構えた時にFire1ボタンを押したら銃のレーザーポインターの表示、銃の効果音を鳴らしていましたが、これをJudgeShot内に移動させます。

以下がPlayerスクリプトで銃を撃った時の処理ですがshot.SetAbleLightとshot.PlaySEを削除しShotスクリプトのJudgeShotへ移動させます。

なぜPlayerスクリプトで分けていたのか疑問ですね・・・・(^_^;)

ではShotスクリプトに処理を追加していきます。

まずは銃を撃った時に弾があったかどうかで鳴らす効果音を変更する為のフィールド、弾の数を表示するテキストを設定するフィールドを宣言します。

Shotスクリプトに弾がない時の音声クリップ等を設定する

↑のように効果音と弾の数表示用Textを設定する事になります。

弾がない時の効果音はAssetStoreでオーディオ→効果音→武器→Futuristic weapons setのpower fist→idle_power_fist_1を使用しました。

弾がなければ弾がない時用の効果音を鳴らし、returnでそれ以降の処理を実行しないようにします。

弾があった場合は銃の発砲の光と発砲音を鳴らし、myStatus.SetNumberOfBulletで弾の数を減らしその戻り値をbulletTextに設定します。

次にPlaySEメソッドは今まで銃に設定されているAudioSourceに元々設定してある銃の発砲音を鳴らしていましたが、弾がない時は別のオーディオクリップを再生したいので、再生するオーディオクリップを受け取り、そのクリップを再生するように変更します。

AudioSourceのクリップに引数で受け取ったクリップを設定し、その後再生させます。

弾を表示するテキストUIは銃に切り替えた時に変更したいので、SetComponentメソッド内に処理を追加します。

これで装備をハンドガンタイプやショットガンタイプに切り替えた時、弾の数が変更されるようになります。

終わりに

これで銃の弾の管理も出来るようになりました。

弾の数に制限があると銃の使いどころを考慮する必要があり、ゲーム性が非常に増しますね。(^^)/

弾を取得する機能を搭載する時もMyStatusスクリプトのSetNumberOfBulletにGetNumberOfBulletの戻り値に取得した弾の数を設定すれば簡単に出来そうですね。

でも今のままだと現在装備している武器の弾を設定するので武器のタイプを引数で受け取る仕様に変更して弾をセット出来るように改造する必要はありそうです。

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

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます