PR

【UE5】「画面範囲ロックオン」を作ってみようその5:ロックオン画面範囲を作ろう!【TPSシューター】

Maya

本記事は「UE5_Ver5.3.2」で制作しているよ

また【画面範囲ロックオン」を作ってみよう】シリーズは、一部記事が「有料」だよ
ご理解のもと閲覧していってね

また、前提条件として「射撃システム」を実装する必要があるよ
まだしてないのなら下記のURLから飛んで見てみてね

こんにちは!ウンパッパです!

今回は「画面範囲ロックオン」を作ってみよう第5弾!

お待ちかねの
画面上に「ロックオンの画面範囲」を表示し画面内にいる敵のみホーミングを誘導させる

を実装していくよ!

この記事は「敵のマーカーを切り替えよう!」の続きだから
もし見てなかったら下のボタンから飛んでみてね

まずこの記事で何が実装されるのか、「完成した姿」を見てみよう

画面に表示された範囲に入る1体の敵のみ「マーカー」が「◇」に変化
「◇」に弾丸ホーミングして着弾するよ

その一方で画面範囲外にいる敵は「◇」にならないし「□」には一切ホーミングしないね

これぞまさしく「ハイスピードロボットアクション」によくある
「画面範囲ロックオンシステム」だ!

これを高速移動しながらロックオンできると想像すると胸が躍るね!

それでは早速「ロックオン画面範囲」を作っていこう!

Project設定で「画面サイズ」を決めよう

画面範囲を作っていく前にまずは「Project設定」にて「画面サイズ」を決めに行くよ

というのも、このシステムは画面のサイズに依存しているから
「画面アスペクト比を設定」しないで作っていくと
いざ「プレイ」したときに「ロックオンの取得位置がずれてしまう」んだ

こんなかんじにね

なので、まずはゲームを作るのにちょうどいい「画面サイズ」を設定しよう

設定の開き方としては
画面上部にある「プレイボタン」の横にある「…」⇒「詳細設定」をクリック

すると「環境設定」の「プレイ」の項目に飛ばされるよ

その中にある「Game Viewport Settings」が画面サイズの設定だ
ここを希望通りの数値に変えてゲームを調整しやすくしていこう

ちなみに、「レベルエディタ画面」のゲーム画面のサイズは適応されないので注意だ

「レベルエディタ」以外で「プレイ」するか

「新規エディタウィンドウ(PIE)」で
新規ウィンドウを生成して「プレイ」しよう

「ロックオン画面範囲」を「HUD」に表示しよう

まずは「SRLO_HUD」にて「ロックオン画面範囲」を描画しに行こう

「イベントグラフ」にて「Draw Screen Racge関数」を作ってノードをこんな感じに組んでいこう

「sequenceノード」には必ず「Then0」に「Draw Screen Racge関数」をつなげてね

優先順位が「Track Enemies関数」より下だと
「Screen Size X,Y変数」が「Track Enemies関数」の処理に乗っ取られるよ

できたら「Draw Screen Racge関数」を開いて

画面範囲のサイズを決めるため「Screen Range Size変数」を作りに行こう

作った変数内容
Screen Range Size XFloat512画面範囲の横軸のサイズ
Screen Range Size YFloat512画面範囲の縦軸のサイズ

出来たら

こんな感じにノードを組んでいこう
り膨大だからまずは「全体画像」だ

同じノード群が組まれてると思うけど、この1つのノード群が「画面範囲の一辺」を描画していくんだ

順番として「上辺」⇒「右辺」⇒「下辺」⇒「左辺」と描画の処理がされてるよ

まずは「上辺」から順に組み立てて行こう

「上辺」を組み立てる
「右辺」を組み立てる

「+」と「-」ノードに注目して
ここが変わることによってノードの向きと位置が変わってるよ

「下辺」を組み立てる
「左辺」を組み立てる

いいね!
描画できたよ「ロックオン画面範囲」!

次は画面範囲を「SRLO_System」に判定させられるよう「画面サイズの値を準備」しにいこう

画面サイズの値を準備しよう

ロックオン範囲を描画できたし早速「画面範囲ロックオン」を組み込む…
前に、まずは「画面サイズ」の値を「SRLO_System」でも使えるように引用してこよう

さらに「画面サイズやアスペクト比が変化した」際にある程度「画面範囲」がずれないように
調整してくれるようにもしておこう

「SRLO_System」を開いて以下の変数を作ってね

作った変数名内容
Screen Range Size X MinFloat0変化後の画面における
X軸の「画面範囲」の「始点」を算出
Screen Range Size X MaxFloat0変化後の画面における
X軸の「画面範囲」の「終点」を算出
Screen Range Size Y MinFloat0変化後の画面における
Y軸の「画面範囲」の「始点」を算出
Screen Range Size Y MaxFloat0変化後の画面における
Y軸の「画面範囲」の「終点」を算出

変数の用意が出来たら
「イベントグラフ」にて「sequenceノード」に「Then3ピン」を増やし
そこからこんな感じのノードを組んでいこう

これで準備完了だ

次はいよいよ「画面範囲」を「ロックオンシステム」に組み込んで
「画面範囲ロックオンシステム」を作りにいこう!

システム:「画面範囲ロックオン」を作ろう!

「SRLO_System」の「Search Radar関数」を開いたら

「Lock-On Search Radarノード群」にて「探知範囲内であるか?」の次に
「ロックオン画面範囲にいるか?」を追加していくよ

まずは「ロックオン追加」側
「探知範囲内であるか?」の次にこんな感じでノードを作ってね

次に「ロックオン排除」側

さっき作った「ロックオン画面範囲にいるか?」をコピペして
「探知範囲内であるか?」の次にくっつける

そして「Branch」の「False」に「Track End関数」を付けよう

組み終わったらプレイしてみよう

「ロックオン画面範囲」の内側に敵がいた場合「敵がロックオン」され

「ロックオン画面範囲」の外側に敵がいた場合「ロックオンが解除」される!

そして「ロックオンしている敵」にのみ「弾は誘導」する!!

出来てるね!「ロックオン画面範囲」!!最高だ!!!
ただ、このまま「マルチロックオン」でもいろいろな場面で使えるけれど

やっぱ「シングルロックオン」できる方がいいよね!
というわけで仕上げとして「敵単体のみをロックオン」する「シングルロックオン」に変えて行こう!

シングルロックオンにしよう

さっき作った「ロックオン画面範囲内にいあるか?」の次に「シングルロックオン」を作るよ

「ロックオン追加」時はこんな感じ

「Is Valid Indec」の指定する値は「0」
「Branch」は「False」で実行できるようにしてね

次に
「ロックオン排除」時はこんな感じ

「Is Valid Index」の指定する値は「1」
「Branch」は「True」で実行できるようにしてね

出来たらプレイしてみよう!

1体の敵しか追加しないようになってるよ

出来てるね!「シングルロックオン」!

すばらしい!

ただこれだけだと物足りないので
最後に、音を付けてみよう!

ロックオン時に音を出す

まずは「サウンドキュー」を作ろう

「レベルエディター」の「コンテンツブラウザ」にて
取り入れたアセットである「SE_button-2-dry」を「右クリック」⇒「キューを制作」

サウンドキューが出来たら開いてね

開いたら音量調整しに行こう

画像では「0.25」にしてるけど
お好みの音量でいいよ

出来たら「SRLO_System」の「Search Radar」を開いて

「ロックオン配列追加」の箇所にてこんな感じにノードを組んでね

出来たら「プレイ」してみよう!

音がついて、敵がロックオンされたかどうか、視覚的に分かるようになったね!

さらに「ロボットゲームの射撃システム」らしくなってきたよ!

やったね!!

 

ただ、少し残念な話

「同時に敵を画面内に収めた」場合に敵の距離や位置に関係なくランダムで敵をロックオンするから
「望んだ相手」をロックオンできなくて不便だね

更に
このままだと「壁越し」でも「マーカー」が表示されるし「敵」もロックオンできてしまうんだ

なので

「望んだ敵をロックオンする」を次の機会に回して

まずは「壁の奥にいる場合は敵を取得しない」を次回作っていきたいと思うよ!

おわりに

以上、
「画面範囲ロックオン」を作ってみようその5:ロックオン画面範囲を作ろう!
でした!

ここまで読んでくれてありがとね!
次回は「壁の奥にいる場合は敵を取得しない」
を作っていきたいと思うよ!

下のボタンから次のページに進めるよから

よかったら見ていってね!

一覧に戻る

コメント

unpappa

3Dとゲーム制作を趣味でたしなむ遊び人
ロボットアニメとアニメ調のキャラが好きで趣味でちょこちょこ作ります
人生の目標は「オリジナルのロボゲー」を1本作る事!
初心者だからこそ、いろいろな荒波がやってくるけど、それらを学びに変えて
「最もわかりやすいクリエイティブブログ」を目指してます!どうぞ良しなに!

unpappaをフォローする
Ci-enを始めました!あなたの応援で本サイトの記事の投稿頻度と質を向上させることができます!
詳しく見る!
Ci-enを始めました!あなたの応援で本サイトの記事の投稿頻度と質を向上させることができます!
詳しく見る!
タイトルとURLをコピーしました