[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した値をセットします。
この記事が気に入ったらサポートをしてみませんか?