現在、エネミータグを持つアクターにカメラがロックオンするブループリントを作っているのですが
最初に一番近い「Enemy」タグを持つアクターにロックオンした後、一度ロックオンを解除し、再度ロックオンしたときに一番近い「Enemy」タグを持つアクターを索敵を行いロックオンしたいのですが、作ったブループリントでは最初にロックオンしたアクターにもう一度ロックオンしてしまいます。
どうすれば情報がリセットされ、一番近いEnemyに再度ロックオンするようにできるのでしょうか?
また、現在ロックオンしたあと、敵1と敵2が居り、また両方が同じ距離にいた場合自動でロックオンが切り替わるので一度ロックオンを行うとその敵にロックオンし続けるブループリントも作成したいです。
質問が多くて申し訳ありません。もし解決策があれば教えてください、どうかよろしくお願いします。
unaunagi
(unaunagi)
2
Tickの中でやると毎回ロックオン対象を調べてしまうので、
ロックオンボタンを押した時に、1度だけ調べて、その内容を変数に保存しておくのがいいと思います。
それ以降ロックオン先を変更するまでその変数のアクターを使います。
途中でロックオンした敵が死んだ場合に備えて、IsValidノードで生きてるかどうか調べる必要はあります。
これで同じぐらいの距離の敵がいても、チラチラ切り替わることはなくなります。
ロックオンし直した時にどんどん切り替えていくのも、
ロックオンした敵アクターを、変数に保存しておけばいいです。
今までロックオンしたアクター全部保存しないといけないので、配列変数に保存します。
ForLoopでロックオン対象を探す時に、その敵アクターと配列に保存済のアクターが一致したら無視します。
全部ロックオン済みで対象がゼロになったら配列をclearすれば、また一番近いやつから探し直せます。
返信が遅くなり、申し訳ありません。
なるほど、なぜ毎回切り替わるのか理解できました!
しかし、Forloopでロックオン対象を探す時に保存済みのアクターと比較する方法が分かりません…、もしお時間があれば教えていただいてもよろしいでしょうか?
unaunagi
(unaunagi)
4
配列の中に一致したアクターがあるかどうかは、ContainsItem というノードを使うのが簡単です。
配列じゃなくてアクター同士が同じか調べるなら、数字とかと同じように==ノードを使います。
配列ノードのチュートリアルの中にあったのですね…
早速頂いた情報を駆使してブループリントで作ってみます、ご回答ありがとうございました!