Chapter 41無料公開

📰シューティングゲームを作る(3)スコアと破壊を実装する [UE5入門チュートリアル #3-15]

Daichi
Daichi
2022.05.28に更新

コメント🐤

前回に続いて、今回は的の破壊とスコアを実装してさらに音を簡単に追加,調整していきたいと思います。

このページで実装する機能

https://www.youtube.com/watch?v=JoBE8EHR4eE
的に弾が当たるとエフェクトと音とともに消滅して、PrintStringでスコアを表示させます。本来であればスコアはUIとして大きく表示したいのですが、あくまでブループリント応用編としてなので今回はUIは使用せずにゲームを作成していきます。

①的の破壊

では、的は弾が当たった時点で破壊されるようにしたいと思います。

  1. 的のブループリントクラス「Target」を開きます。現在こんな感じのブループリントになっています↓ここに追加していきます。
  2. ここにEventHitノードからDestroyActorノードを作成します。これで的に弾が触れた瞬間に削除されます。

EventHitノードとは?

EventHitノードとは衝突判定があるアクタ同士が触れた時に、ノードを実行するものです。

例えば上のノードの場合、触れた瞬間にHelloとテキスト表示されます。以下キューブのブループリントクラスに実装した場合、他のアクタが触れた瞬間にノードが実行されてテキストが表示されます。

  1. DestroyActorからPlaySoundatLocation(音を再生するノード)とSpawnEmitteratLocation(パーティクルを再生させるノード)を接続します。PlaySoundatLocationのSoundにはExplosion01(スターターコンテンツのアセット)を、SpawnEmitteratLocationにはP_Explosion(スターターコンテンツのアセット)を選択します。さらにパーティクルを再生させる位置は的の位置にするためにGetActorLocationノードを接続します。

    これで爆発音と爆発エフェクトをつけました。

ノード解説

これで弾がヒットした瞬間に1.DestoryActorで破壊→2.PlaySoundatLocationで爆発音を再生→3.SpawnEmitteratLocationで爆発エフェクトを再生という流れができました。なお、今回の場合だとノードの順番は前後しても機能自体に変わりはありません。全て同じフレームで実行されるためです。

  1. ノードはこんな感じになりました。コメントも全体を選択した状態でCキーで付けておきます。

  2. プレイしてみると、弾が触れたら爆発音と爆発エフェクトが再生されてそして的は削除されるようになりました。

コメント🐤

次に必須事項ではありませんが雰囲気作りのためBGMを簡単に追加して、音量を調整しておきましょう。

②BGMの追加と音量の調整

BGMを設置して発射音や爆発音の音量も適当に調整しておきましょう。

  1. StaterContentのAudioからStater_Wind06をドラッグでレベルに設置します。なお本来直接レベルに追加する方法はあまり行いませんが、今回はブループリントを学ぶのが目的なため簡単な方法で行いました。
  2. 追加したStater_Wind06のアセットをダブルクリックで開いてサウンド>Volumeを0.3にしておきます。音量は適当で構いません。
  3. 爆発音は StaterContentのAudioにExplosion01があるのでダブルクリックで開いてVolumeを0.4にしておきます。
  4. FPWeapon > Audio > FirstPersonTemplateWeaponFire02をダブルクリックで開いてVolumeを0.2にします。

コメント🐤

なおアセットはブループリントからでも表示できます。なのでPlaySoundatLocationで使用したExplosion01というサウンドのアセットを表示したい時にはブラウズボタンで表示できます。

  1. プレイしてみます。風のBGMが追加され、音量が調整できました。

https://www.youtube.com/watch?v=uQdG8Xx78pU

コメント🐤

では、次に的を破壊した時のスコアを実装したいと思います。

③スコアを実装する

的に弾を当てて破壊した時に、スコアとなる変数に+10する処理を追加します。

  1. Integer型のScoreという変数を作成していくのですが、場所は操作するキャラクターのブループリントで作成しましょう。FirstpersonフォルダのBlueprintsフォルダからBP_FirstpersonCharacterをダブルクリックで開きます。

  2. 整数のデータとなるInteger型のScoreという変数を作成します。

  3. 変数は作成したらコンパイルしておきます。

コメント🐤

プログラミングではわかりやすさが重要です。スコアが誰が所有するのか、最もわかりやすい場所に作成しましょう。今回のような場合だとレベルブループリントか、スコアを獲得するプレイヤー(BP_FirstpersonCharacter)にスコアの変数を実装するのが良いと思います。

  1. 次に的となるブループリントクラス「Target」のブループリントを開きます。破壊の処理の後にスコアを追加する処理を記載していきます。

  2. SpawnEmitterノードからCastToBP_FirstPersonCharacterノードに接続し、GetPlayerCharacterノードを追加します。

CastTo~ノードとは?

Objectのピンに接続したオブジェクトが、今回の場合だとBP_FirstPersonCharacterだった場合にノードを実行するノードです。さらにCastする事によってそのBP_FirstPersonCharacterの変数を呼んで変更を加える事が可能になります。つまり、CastTo~ノードとは別のブループリントクラスを呼び出してそこにある変数を変更するためなどに必要なノードになります。

GetPlayerCharacterノードとは?

ゲーム中のプレイヤーとなるCharactorクラスを取得するものです。簡単にいうと、これでプレイヤーのブループリントクラスを取得できます。

CastTo~ノードとGetPlayerCharacterノードによって他のブループリントの変数に変更を加えるようにしているという事ですね。

  1. CastToBP_FirstPersonCharacterノードから、以下のように接続します。

    まず CastToBP_FirstPersonCharacterノードのAsFirstPersonCharacterからget scoreと検索してスコアを取得します。その後Add(加算する)ノードを作成して10と入力します。この10が獲得するスコアになります。SetScoreノードを作成して(状況に合わせた表示のチェックを外して検索)、その後PrintStringを作成します。

  2. コメントを追加してこんな感じになりました↓

ノード解説

簡単に解説するとCastToノードでプレイヤーのブループリントクラスを呼んで、それによりScoreの変数をTargetのブループリントから変更できるようになります。他のブループリントの変数はそのままだと変更する事はできないので、CastToノードによって使えるようにしたという事になります。Scoreを取得したら10を追加してSetScoreでスコアをセットしてテキスト表示をしているといった感じになります。

スコアを+10追加する機能が完成!

Targetに追加したノードは以下のようになりました。

確認&コピペはこちら↓

https://blueprintue.com/blueprint/-2hm_72a/
  1. プレイしてみましょう。的に弾を当てるたびに+10されてテキスト表示されるようになりました↓

コメント🐤

今のままでは、どれだけでも弾を撃てる状態で連打ゲーになってしまうので発射にコストを追加しましょう。

④弾の連発を防ぐために、撃つ毎にスコアを-1する

では発射する度にスコアを-1して弾を発射するコストを付けたいと思います。

  1. 弾の発射はFirstPerson > Blueprints > BP_Rifleに記載しているのでそこを開きます。

  2. イベントグラフを開いて、一番右下のMontagePlayノードがある所からノードを作成していきます。

  3. MontagePlayノードから以下の赤枠の部分のノードを作成します。先ほど作成した+10のスコアを作成したノードとほぼ同じです。全体図↓

    上の画像が小さいので分割した画像は下になります。

    CastToノードによってキャラクターのブループリントのScoreにアクセスして、Subtract(減算する)ノードで-1してSetScoreノードでセットしてテキスト表示します。

  4. プレイして、弾を発射してみます。これで撃つたびにScoreの変数が-1されてテキスト表示されるようになりました。

  5. コメントを付けて完成です。

確認&コピペはこちら↓

https://blueprintue.com/blueprint/kxkpvc3i/

完成!的の破壊とスコアを実装しました

https://www.youtube.com/watch?v=JoBE8EHR4eE
これで的を破壊とスコアを実装できました。

コメント🐤

では、次回タイマーを実装して時間制限内にどれだけスコアを稼げるかというシューティングゲームが完成します。このゲーム制作の経験が自身のオリジナルゲームを作る時のヒントになれたら幸いです。