[UE4]ロックオンターゲット変更

〇前提

ロックオンそのものの処理は以前の記事を参照ください。


〇やりたいこと

ロックオン中、特定のキー入力を行うとその場にいるロックオン対象を調べ、ほかに対象がいたらロックオンターゲットを変更する



〇下準備

まず、プレイヤーキャラクターのBPにコンポーネントを追加からArrowを追加し、「LockOnChecker」という名前にします。

(Arrowでなくてもいいとは思いますが、分かりやすいのでArrowにします。)

また、ロックオン対象にしたいアクターに、「LockOn」というタグをつけておいてください。


〇手順

次に、関数「LockOnTargetChange」を作ります。

以前のロックオン処理でやった、ロックオン対象を示すUIを一旦非表示に。

そのあと、LockOnCheckerを使ってSpereTraceByChannelでスフィアコリジョンを出します。

(画像のは独自で作った関数ですが、SpereTraceByChannelで判定を取るときによく使う処理をまとめているだけなので、気にしないでください。)


先ほどのSphereTraceByChannelで、Hitしたら、「GetAllActors with Tag」で「LockOn」タグを持つアクターを検索します。

検索したアクターを、「LockOnActorArray」という配列を作って格納。

どれくらい「LockOn」タグを持つアクターがいるかは状況によって変動するので、配列にいくつのアクターがいるのか、最大値を取得し、int型変数に格納します。


変数「NowLockOnActor Num」(今ロックオンしている対象は配列の何番か?)をチェックします。


もし0番なら、配列「LockOnActorArray」の0番と、今ロックオンしているアクター「LockOnActor」が同じかチェック。

同じなら、配列「LockOnActorArray」の1番のアクターを「LockOnActor」にセット。

違うなら0番をセット。


変数「NowLockOnActor Num」が0番じゃないなら、

配列「LockOnActorArray」のGetのintのピンに「NowLockOnActor Num」をつないで、それを「LockOnActor」にセットします。

最後に、ロックオン対象用のUIを再度ポジションセットし、

「NowLockOnActor Num」に+1したら、配列の最大値「LockOnActor Array Length」を超えるかをチェック。

超えるなら「NowLockOnActor Num」に0をセット、超えないなら+1した値をセットします。







この記事が気に入ったらサポートをしてみませんか?