プレイヤー(自分)が敵の正面/背面どちらに立っているかを判定する方法!
レベルBPを開きます。
以下のような処理を組みます。
Qキーを押した時、自分が敵の正面にいるか背面にいるかを判定する処理です。
それでは解説していきます。
敵の前面ベクトルと位置を取得
プレイヤーの位置も取得しています
↓上から見るとこんな感じですね
赤枠が敵
青枠がプレイヤー
赤矢印が敵の前面ベクトルです。
敵の位置と自分の位置から角度を割り出します。
↓上から見た図です
この場合、FindLookAtRotationから返される値は
おおよそ「Pitch:135」といったところじゃあないでしょうか。
そして、FindLookAtRotationの返した角度を
GetForwardVectorで正規化します。
例えば、FindLookAtRotationから返された値が「Pitch:90」だった場合
その値を正規化したら「Y:1」になります。
「Pitch:-90」だった場合は
「Y:-1」です。
角度が正の値だった場合正規化される値は「正の値の1」
角度が負の値だった場合正規化されえる値は「負の値の1」
になるわけです。
この場合、正規化された値は、
「X:-0.765362 Y:0.643600」ぐらいです。
敵の前面ベクトルと
FindLookAtRotationで求めた角度を正規化した値から
内積を求めます。
内積を求めたら
ACOSdとかいうよくわからんノードで
角度を求めます。(適当w)
赤矢印が敵の前面ベクトル
黄色矢印がFindLookAtRotationで求めた角度の正規化したベクトル
この2つで内積を求める。
そして求めた内積で角度を割り出す。
緑色で塗りつぶされているのが角度。
この場合だと、大体「45度」ぐらい。
角度によって正面か背面かを判定
ACOSdから返された値をInRangeのValueに繋ぐ。
角度が「0~90」だった場合、敵の正面にいると判定
それ以外は背面と判定されるようになっている。
これで完了です。
それではまた!^^ノシ