本記事は「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」なら弾がホーミングする!
でした!
ここまで読んでくれてありがとね!
次回は「敵のマーカーを切り替えよう!」
を作っていきたいと思うよ!
下のボタンから次のページに進めるよから
よかったら見ていってね!
コメント