Chapter 40無料公開

📰シューティングゲームを作る(2)的を一定時間毎に生成する [UE5入門チュートリアル #3-14]

Daichi
Daichi
2022.05.28に更新

コメント🐤

では、前回の続きで今回は作成した的をゲームプレイ中に生成していきたいと思います。解説動画は今しばらくお待ちください。

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

https://www.youtube.com/watch?v=pKPooSTRtZo
前回作成した移動する的を一定間隔で左右に生成させます。

コメント🐤

なお、ノードが複雑になってきますが少しずつ理解していきましょう。最悪、blueprintUEにもノードを貼っていますのでコピペでも作成できます。(ページ最後にリンクあります)

①スタート位置の変更とテキスト表示

  1. まずはPlayerStart(プレイヤースタート)の位置を変えておきます。以下のトランスフォームにします。

    これでプレイヤーのスタート位置が変更されました。

  2. レベルブループリントを開きます。

  3. まずはゲーム開始後3秒後にPrintStringでSTARTと表示させて、そこから自動生成を行いたいと思いますので先に実装しましょう。BeginPlayからDelay,PrintStringと作成します。Delayには3,PrintStringにはSTARTと入力します。

    3秒後にSTARTと表示されます。このタイミングで的を自動生成を開始していきます。

②的を一定間隔で生成する

まずはプレイヤーから見て左側ステージの外(アクタを配置した場所)に、アクタを生成したいと思います。

  1. 一定時間毎に処理を実行するにはSetTimerbyEventノードを使用します。Timeに1と入力しLoopingにチェックを入れます。

SetTimerbyEventノードとは?

SetTimerbyEventノードとはTimeで間隔時間を決めて、Loppingにチェックを入れると繋げたカスタムイベントを一定時間毎にゲーム中繰り返し実行します。つまりSetTimerbyEventノードとは一定時間毎にEventに繋げたノードを実行するものです。

上のノードをプレイするとこんな感じ↓に一定間隔(0.5秒毎)でHelloと表示されます。

  1. Eventからワイヤーを伸ばし、カスタムイベントを追加して名前をSpawnTargetにします。

  2. SpawnActorfromClass(スポーンアクタ)ノードを作成して、以下のようにSpawnTransfomm上で右クリック > 構造体ピンの分割をクリックします。Locationも同じように構造体ピンの分割をクリックします。これによりピンを分割してそれぞれ設定する事が可能になります。

    最終的にこんな感じになります↓

  3. 生成するトランスフォームを確認しておきましょう。左に設置してある的を選択してトランスフォームを確認して覚えておきます。このトランスフォームの値に的を生成していきます。

  4. SpawnActorfromClassの設定を行います。Classに生成するTargetブループリントクラスを、LocationX,Y,Zに生成する位置を入力して、TransformRotationにアクタの角度を入力します。

  5. プレイしてみると、アクタが一定間隔で生成されてるようになりました。生成した的は前回作成した移動するノードによって左から右へ移動します。

コメント🐤

では、生成される的の高さや奥行きをランダムにしてみましょう。

③生成する場所をランダムにする

  1. RandomFloatinRangeノードを作成してZ軸(高さ)とY軸(奥行き)にランダムにします。

RandomFloatinRangeノードとは?

Minの値からMaxの値の間でランダムなFloat型の小数を作成します。つまりMin100,Max200にした場合は133.4235や、199.5555などの小数値をランダムで生成します。

  1. プレイしてみます。良い感じに奥行きと高さがランダムで生成されるようになりました。gifだと的の色がバグっていますが気にしないでください。

現在までのレベルブループリント全体図

このページで作成したブループリント全体図です↓

確認&コピペはこちら↓

https://blueprintue.com/blueprint/3j65l55c/

コメント🐤

生成されている様子を確認する方法を紹介します。プレイした状態でSfift+1 > プレイボタン右にあるこのボタン↓からプレイカメラからエディタで操作しているカメラに切り替える事ができます(F8でも可能)。そしたらカメラをいつも通り右クリック + WASDキーで移動できます。


すると的のアクタが生成されている様子が確認できます。

④左右に的が生成されるようにする

では、左に生成はできたので右側にも的を生成しましょう。

  1. レベルブループリントを開いてカスタムイベントからのワイヤーをAltを押しながらピンをクリックして、ワイヤーを切り離します。
  2. SpawnActorfromClassノードと繋げたRandomノードを選択した状態でCキーでコメントを作成して「プレイヤーから見て左側に生成」と記載します。
  3. SpawnTargetからブランチノード,RandomBoolを作成します。

RandomBoolノードとは?

ランダムでBoolean型のtrue,またはfalseを出力するノードです。つまり上のノードでtrueまたはfalseをどちらかを出力してブランチではtrueまたは,falseに繋げたノードが実行されます。なお、こういったノードは一つ一つ地道に使って覚えていくしかないので、じっくり経験値を増やしていきましょう。

  1. ブランチのtrueからSpawnActorに接続します。

  2. 右側に設置した的のx座標を確認します。(-180)

  3. アクタを生成するSpawnActorのノードをコピペして下に追加し、Falseから接続します。

    変更するのはコメントを右側にする事と、生成するX座標を-180にする事です。

  4. プレイしてみましょう。左右から生成されるようになりました。

  5. もう少し生成される間隔を短くしたいと思います。SetTimerByEventのTimeを0.5にして0.5秒毎に左右ランダム生成させます。

  6. さらにレベルに配置してある的はもういらないので左右両方削除します。

  7. プレイしましょう。左右に一定間隔で自動生成される移動する的が実装できました。

https://www.youtube.com/watch?v=pKPooSTRtZo
これでこのページのノードは完成しました。

完成!作成したレベルブループリント全体図

今回作成したレベルブループリント全体図です↓

確認&コピペはこちら↓

https://blueprintue.com/blueprint/81yfbpfu/

コメント🐤

プログラミング,つまりノードの組み方に正解はありません。イメージしている機能を実装できればノードの組み方は何でも構いませんが、注意する点が2つあります。それは「ノードのわかりやすさ」と「ノードの処理負荷(重さ)」です。初心者の方はその二点を気にするとハードルが高くなるので最初はまずはノードの組み方は何でも良いので「実装する事」に重点を置いてゲーム開発していきましょう。