本記事は「UE5_Ver5.3.2」で制作しているよ
また【画面範囲ロックオン」を作ってみよう】シリーズは、一部記事が「有料」だよ
ご理解のもと閲覧していってねまた、前提条件として「射撃システム」を実装する必要があるよ
まだしてないのなら下記のURLから飛んで見てみてね
こんにちは!ウンパッパです!
今回は「画面範囲ロックオン」を作ってみよう第6弾!
「Enemy」よ「プレイヤー」の間に「壁」がある場合「Enemy配列」に加えない、排除する
を実装していくよ!
この記事は「ロックオン画面範囲を作ろう!」の続きだから
もし見てなかったら下のボタンから飛んでみてね
まずこの記事で何が実装されるのか、「完成した姿」を見てみよう
ロックオンできていた「敵」が「壁」で見えなくなった時、ロックオンが外れているね
そして「マーカー」の表示がなくなっているのもわかるね
これで当たりもしないのにロックオンする不快感や
疑似的なウォールハックを阻止できるね
それでは早速作っていこう!
「敵」と「プレイヤー」の間に何か当たったかを判定する
今回のシステムの内容としては
「敵」と「プレイヤー」の間に「線」を作り
その「線」に何かが当たった場合は「ロックオン」が追加できない、解除される
という形で作っていくよ
また、
本来なら「当たり判定の始点」を引用する場合
「プレイヤーのカメラ」の方がいいんだけど
解説としてわかりやすくするために「プレイヤーの中心」を引用して
「線の当たり判定」を引いてくよ
というわけでまず
「線の当たり判定」を引くための「始点」
「プレイヤー」の「位置」から取得していくよ
プレイヤーの位置を取得する
まずは「SRLO_System」の「Search Radar関数」を開いて
一番最初にある「関数の入力ノード」にこんな感じに変数とノードを組んでね
作った変数 | 型 | 値 | 内容 |
Player Location | Vector | 0 | プレイヤーの位置を取得 |
これでプレイヤーの位置の取得はOKだ
次は「Enemy追加ノード群」にて「プレイヤーと敵の間に壁があったら追加しない」を作っていこう
「壁」があったら追加しない
「SRLO_System」の「Search Radar関数」にて
「Enemyの配列追加」のノード群にある「探知範囲内であるか?」の次に
「プレイヤと敵の間に壁はあるか?」というノード群を作ろう
こんな感じに組んでね
これでノードはOK
それでは「プレイ」してみよう
…おかしい
全部取得できてない
壁に当たった判定はあるのにシステム上それが反映できてない
なぜなのか?
おそらくなんだけど
「アクター」の「コリジョン設定」が「Trace By Channelを2つ使うこと」に
対応できてないのが理由なんだ
「アクター」の「コリジョン設定」を変更する
「Trace By Channelを2つ使うこと」に対応できてない
というのも
「1つのアクター」を取得するのに「Muluti Sphere Trace By Channel」と
「Line Trace By Channel」が「齟齬」を起こして取得できない状態になってるみたいなんだ
でも大丈夫!
「アクター」の「コリジョン設定」を変更すれば「両方とも機能する」ようになるよ!
それでは早速変更していこう!
まずは「敵のBP」を開いて
「コンポーネント」にて「コリジョンが割り触れられているコンポーネント」を選択してね
今回は「Sphere(メッシュ)」に「コリジョン」があるから「Sphere(メッシュ)」を選択
詳細にて「Collision」と検索する
すると
「コリジョンプリセット」が出てくるので、
「コリジョンプリセット」を「Custom」に変更して
「Visibillity」を「オーバーラップ」にチェックしよう
これでOKだ
「プレイ」してみよう!
うん!
壁の奥だと敵に「マーカー」が表示されなくて
「壁の前」は「マーカー」が表示されて「ロックオン」もできる
いい感じだね!
それじゃあ次に「プレイヤーと敵の間に壁があったら排除する」を作っていこう!
壁があったら排除する
今回は「Enemy配列排除」だけでなく「Lock-On配列排除」の2つのノード群に
差し込んでいくよ
両方とも「探知範囲内であるか?」の次に作っていくよ
「Enemy配列排除」の方
「Lock-On配列排除」の方
これで組み立てOKだ
早速「プレイ」してみよう!
うん!壁があると「すべてのマーカーが非表示」になるね
とてもいいね!
では最後に、
「判定を取る場所」を「プレイヤーの中心から」ではなく「プレイヤーのカメラから」
にしてみよう
「プレイヤーのカメラ」から判定を取る
まず「Search Radar関数」の「入力ノード」にてつなげていた
「プレイヤーの位置」を引用する変数
その引用元を「Get Player Camera Manager」に差し替えよう
次に、今回作った「3つ」の「プレイヤーと敵の間に壁はあるか?」ノード群を
こんな感じに直接「Start」位置を取得するようにしよう
3つすべて変更できたら「プレイ」してみよう!
カメラから見えなくなると同時に「マーカー」も表示されなくなる
とても「従来のゲームらしい挙動」になったね
これにて「壁の向こうにいる敵はマーカーを非表示」は完成だ!
やったね!!
おわりに
以上、
「画面範囲ロックオン」を作ってみようその6:壁の向こうにいる敵はマーカーを非表示
でした!
ここまで読んでくれてありがとね!
次回は「画面中央に近い敵を優先して取得する!」
を作っていきたいと思うよ!
ちなみに次回は【有料】だ!
下のボタンから次のページに進めるから
よかったら見ていってね!
コメント