UE5初心者が「プレイヤーを追尾する物体や遠距離射撃ドローンの作り方」についてまとめていくぜ!
(※解説記事ではなく学習過程を記録するためのポンコツ記事だから要注意!
この記事を書いた後、親キャラクターのBP+NavMesh+Move toの組み合わせを使ってみたら一瞬で似たような動作のBPができて感動した…!!)
本文は「続きを読む」からどうぞ~!
◆プレイヤーを一定距離で追尾する物体の作り方
【追いかける物体のBPを作成】
追いかける物体のBPは、Pawnが親のBPとして作る。
浮いている玉を作るため、コンポーネント欄に①Sphere(または好きなStaticMesh)+②大きいBoxCollision+③PawnSensingを追加する。
(最初はConeにしておいた方がテストしやすいかも)
【物体(親PawnのBP)がプレイヤーを追いかける仕組み】
今回はマップ上に配置するギミックとして「①追尾後4秒間継続ダメージを与える玉」と「②追尾後4秒待ってから自爆する玉」を作ることが目標だ。
※もともと親Actorで作ったBPを後から親Pawnへ変えた経緯があり、まどろっこしい遠回りな構成になってしまっている。
▲ダメージを受ける側のプレイヤーBPに書くノード。
※[Fullscreen]クリックでノードをUE内へコピペできる(離脱はESC)。
▲追尾開始後4秒間、0.07/秒の継続ダメージを与える玉(停止後:その場に残る)。
プレイヤーがBoxCollisionの外へ逃げない場合は、ずっとダメージを与え続ける。
▲追尾開始後に4秒で自爆する特攻玉(停止後:消滅する)。
※親がActorのBPだと、Tickから始まる物体の移動処理は問題なく実行されるけど、OnSeePawn以降のノードが実行されないので注意。
(OnSeePawnかTick&Begin~のどっちかを切ってスリムにまとめられそうな気がするものの、今回は一旦これで完成扱いにした)
【物体を方向転換させるために参照した動画】
▲物体の方向をプレイヤーへ向けるために参考にした動画(英語)。
物体をプレイヤーの方へ向かせるためには、プレイヤーを検知する[PawnSensing]コンポーネントが必要なのでビューポートに追加する。
(+ついでに[Details]欄から[Sight Radius]、[Peripheral Vision Angle]、[Sensing Interval]も設定しておく)
[PawnSensing]コンポーネントで[On See Pawn (PawnSensing)]=ポーン感知時に起動するイベントを作ったら、後続部分に物体の正面方向をプレイヤーが居る方へ回転させる処理も書いていく。
- [Find Look at Rotation]ノードで「アクターの顔の向き」が「プレイヤーの向き」と一致するよう、角度を補完しながら回転させる。
- 顔を向ける時の回転速度がやたらカクカクしていたけど、[Pawn Sensing]コンポーネントの[Details]から[Sensing Interval]を0.03へ変えたら滑らかになった。
※「感知頻度を0.03秒間隔にする=OnSeePawn後に行う回転角更新も高頻度になる=カクカクしなくなる」という理由で解決できたっぽい…??
自分は親が[Actor]のBPとして追尾玉を作ってしまっていたけど、上部の[ClassSettings]をクリックしたら、後からでも親が[Pawn]のBPへ変更できた。
(親を[Pawn]にしないと玉がプレイヤーの方を向いてくれないので注意)
- ひとまず、これで外観を鬼火or幽霊に変えて、エフェクトや効果音も追加したら十分ゲームっぽくなる予感!
- ただ、こういう敵っぽいBPを作る場合、本当は親がキャラクターのBPにして[Move to]や[ビヘイビアツリー]を活用する方が10倍効率良く作れるみたいw
- この記事のBPはボツになると思うけど、勉強になったので良しとする…!
◆追尾してくる遠距離射撃ドローンの参考動画
追尾する物体を作った後、「どうせなら追尾してくる遠距離射撃ドローンみたいなマップギミックも作りたいな…」と思って、いろいろ調べてみた。
▲遠隔射撃ドローンを作るうえで参考になる動画(英語)。
- 最初、よく分からないまま動画内容を真似してテストプレイしたら、画面がズームインしたりズームアウトしたり、ちらちらバグってカオスな表示になった。
- FPS視点のやり方をTPS視点のプロジェクトで真似したせいでバグったのかな…と思ったけど、どうやら弾丸側のCollision設定が違うせいでバグっていたっぽい?
気になるちらつきは、[FirstPersonTemplate]内にある弾丸BPのCollision設定を[BlockAllDynamic]にしたら少し軽減された。
▲作成途中のノード。
(顔を左右に回転しながら追尾するだけの状態)
◆追尾してくる遠距離射撃ドローンの作成方法
とりあえず、最適解では無いと思うけど、以下の3つのBPによって遠隔射撃ドローンっぽい動きが実現できた…!
▲ドローンBPのノード(ドローンの移動や向きを制御し、一定間隔で弾丸BP生成)
※変数の初期値:[AttackDistance]1250・[StrafeRight]OFF・[CanAttack]ON。
[TargetPlayer]はCast toで得たプレイヤー情報をもとに作成した参照用変数。
①ドローンのビューポートから、(Self)コンポーネント>[Details]欄>[▼Pawn]>[Use Controller Rotation Yaw]をONにしておく。
②同じく、[CharacterMovement]コンポーネント>[Details]欄で「Fly」と検索したら、[▼CharacterMovement]>[Default Land Movement]を[Flying]に変え、[▼Characer Movement Flying]のMax~を350に、Braking~を200にする。
▲プレイヤーBPに書くノード(弾丸BPが当たったらダメージを受ける処理)。
※変数の初期値:[PlayerHP]100・[HP0?]OFF。
▲弾丸BPに書くノード(ファーストパーソンテンプレートのデフォ弾を利用)。
◆もっと良さそうなドローンの作り方
▲また似たような物体を作る機会があれば、今度は上記のドローン作成動画を参考にしてみようと思う。
- 敵を作る場合、本当なら上の動画みたいに動く範囲を指定してAI Move to(またはビヘイビアツリー)で作っていくのが王道らしい…!
- たしかに、上のドローンは今回作ったドローンよりノード数が少ないので効率も良さそう。
▲[Move to]ノードのシンプルな解説動画
▲ビヘイビアツリーの解説動画
上記2つの基礎動画を見終わった後で、別パターンの効率的な作り方にも再挑戦したい!!