PR

【UE5】「画面範囲ロックオン」を作ってみようその3:「Enemy」なら弾がホーミングする!【TPSシューター】

UnrealEngine5

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

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

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

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

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

「Tag=Enemy」であり「Enemy配列」にいるなら
弾丸が「敵」ホーミングする

を実装していくよ

この記事は「画面上の敵にマーカーをつける!」の続きだから
もし見てなかったら下のボタンから飛んでみてね

また、「射撃システム」や改造予定の「弾丸」に関しては
下記の記事から作ったものだよ

もし作って無かったら下のボタンから飛んでつくってね

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

「マーカー」がついている「敵」に「弾丸」がゆっくりと誘導
目標めがけて着弾しているね

正直、いろいろ既視感ありすぎてこの絵面だけで
ものすごくワクワクするね

最終的には「画面範囲内の敵」をロックオンするようになるとおもうと興奮するよね
とても闘争したい 超したい

そんなロマンを思い出させてくれるシステムの前身を
早速作っていこう!

「ホーミング弾」を作ろう

「通常弾」を「ホーミング属性」に変更し

「Enemy変数」を取得できるようにして

取得した「Enemy変数」を「ホーミング目標」に指定、目標の敵めがけて着弾するようにするよ

BP「Homing_Projectile」の作成

「レベルエディタ」の「コンテンツブラウザ」にて

過去に作った「Projectile」を複製して

名前を「Homing_Projectile」に改名してね

そのまま開いたら

今の「エフェクト」でできた見た目だと見ずらいから
見た目を変更していこう

「コンポーネント」⇒「追加」⇒「球」
で球状のメッシュを作ろう

そして「コンポーネント」の「Sphere」を選択し
「Collision」と検索

「コリジョンプリセット」を「NoCollison」に設定
「Sphere」側の当たり判定をなくそう

これをしないと弾丸が自分に当たって自滅するよ

できたら適当なマテリアルを割り当てて見やすくすればOKだ

「SRLO_System」から「Enemy変数」を取得できるようにする

「Enemy配列」にいる「アクター」をホーミング弾の目標にしたいので 「BP_CP」に行って
「BP_CP」が「SRLO_System」の「Enemy変数」を受け取れるようにしよう

変数の流れとしては
「SRLO_System」⇒「BP_PC」⇒「Homing_Projectile」
という形で受け渡されるよ

「SRLO_System」⇒「BP_PC」は既にできているから

「BP_PC」⇒「Homing_Projectile」にデータの受け渡しがでできるようにしよう

「Homing_Projectile」が変数を受け取れるようにする

「Homing_Projectile」を開いて
「イベントグラフ」から「Homing」という「カスタムイベント」を作り
「インプット」に「Actor配列」が入力できるようにしてね

これで受け取り設定完了だ

「Homing_Projectile」に「Enemy変数」を渡す

変数の引き渡しを一気に作っていくよ

「BP_PC」を開いて

「イベントグラフ」にて「射撃システム」で作ったノード群の「SpawnActor Projectile(Class)」をいじっていくよ

まずは発射する物を「Homing_Projectile」に変更してね

その後
「Homing_Projectile」の「Homingイベント」を生成

「状況に合わせた表示」のチェックをOffにすると出てくるよ

そしてこんな感じに「Enemy配列」を置いて変数を受け取れるようにノードを組めばOKだ

これで「Enemy変数」を「Homing_Projectile」に渡すように出来たね

「Homing_Projectile」を「Enemy」に着弾するよう設定をする

やることとしては

「Enemy」が取得できるならそれを標的とし「ホーミング属性」に変更
「Enemy」が取得できないなら「ホーミング属性」を切り「通常弾」に変更

という形にするよ

さらに今回は「自滅」を発生させないために
「Enemy以外」であり「プレイヤー属性」ならば「攻撃を適応しない」
という機能も組んでいくよ

「Enemy」を標的としホーミングする

「Homing_Projectile」の「イベントグラフ」にて

「Homingイベント」をこんな感じに組んでね

その後、今の弾速だと早すぎて誘導しきらないので

「Projectile Movement」から
通常速度の「Initial Speed」を「200」
加速後に至る最大速度の「Max Speed」を「800」にしよう

これで設定はOKだ!

では「プレイ」してみよう

弾が敵に向かってホーミング出来てるね!

ただ、
「弾同士がぶつかって自滅」してるし
「プレイヤーに被弾するとプレイヤーも消滅」する
そのせいでかエラーまで吐いてる始末

非常によろしくない!

ので、これらを解決しに行こう!

「弾丸」に自滅させないようにする

方法としては「タグ=Frend」なら「当たり判定」を「無視する」
という設定にしていくよ

まずは弾丸に「Tag」をつけるよ

「コンポーネント」から「Homing_Projectile(Self)」を選択して

「詳細」から「Tag」と検索し

「Tags」にて「Index0」を生成し「Frend」という値にするよ

次に「イベントグラフ」にて「Event BeginPlay」からこんな感じにノードを組んでね

これで「Frend」なら「当たらない」設定になったよ

ただこれだけだと足りないんだ

おそらくなんだけど
「当たらない」よりも「破壊属性」の方が「優先度」が高いのか
現状、アクターだったら当たるか当たらないか「考える前に破壊」してしまうのだ

弾丸くん破壊衝動にまみれてるね

なので「Branch」を使って「Enemy」かどうかを考えさせてあげよう
「On Component Begin Overlapノード」からこんな感じにノードをを組んでね

これで設定完了だ

ちなみに「Frend(プレイヤー)なら実行しないBranch」があるなら
これだけで「Destroy Actor」発動しないんじゃないか?

と思うかもしれないが残念なことに「なぜか自滅する」

おそらく
「On Component Begin Overlapノード」の「当たり判定で起動」という条件が
なんやかんやで「Branch」を無視してるみたい

なので「プレイヤー属性の付与」と「Branchによる敵の判別」両方実装しないとダメなんだ

出来たので早速「プレイ」してみよう

うん!自滅もしないし弾丸同士も衝突しない!
そのうえでホーミングがしっかりできてる!

これで「”Enemy”なら弾がホーミングする」システムの完成だ!

やったね!!

おわりに

以上、
「画面範囲ロックオン」を作ってみようその3:「Enemy」なら弾がホーミングする!
でした!

ここまで読んでくれてありがとね!
次回は「敵のマーカーを切り替えよう!」
を作っていきたいと思うよ!

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

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

一覧に戻る

コメント

unpappa

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

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