敵をロックオンする

敵をロックオンする機能を実装する。
ロックオンすると、左右の移動が敵を中心に円を描くような移動になる。

1. ロックオンする敵を決める

1-1. ロックオン可能領域を定義する

プレイヤーのキャラクターBPを開く。
[Components]パネルで[Mesh]の子階層に[Sphere Collision]を作成し「DetectEnemyErea」と命名する。

そして[DetectEnemyErea]の[Details]パネル > [Shape] > [Sphere Radius] を「700」に設定する。

また、[Collision] > [Collision Presets]を「Custom」にし、写真のように[Collision Responeses]を[Pawn]と[PhysicsBody]以外「ignore」にする。

1-2. ロックオン領域内の敵を配列で管理する

敵キャラクターにタグを付ける。
敵のキャラクターBPを開き、[Class Defaults] > [Actor] > [Tags] で「Enemy」というタグを追加する。

プレイヤーのキャラクターBPに戻る。
ロックオン領域に入った敵のリファレンスを格納する配列を定義する。
「OverlapEnemies」という変数を作り、[Variable Type] を「Actor > Object Reference」にし、「Array」にする。

[DetectEnemyErea] > [Details]パネル > [Eents] から [On Component Begin Overlap] と [On Component End Overlap] を十字ボタンを押してオーバーライドする。
それぞれ下のようにBPを組む。

1-3. ボタンを押したときに最も近い敵をロックオン対象にする

キーボードの「Q」を「LockOnEnemy」に割り当てる。

「FindClosestEnemy」という関数を定義する。
インプットとアウトプットを下のように設定する。

ローカル変数として Actor型の「TempTarget」とFloat型の「TempDistance」を定義する。

下のようにBPを組む。


そして[Event Graph]でQボタンを押したときに[FindClosestEnemy]を読み出すようにする。
今ロックオン中かを記録するブール型の変数「IsLockOn」を定義して、下のようにBPを組む。



2. ロックオンの処理

3. キャラクター移動の処理