プレイヤー(自分)が敵の正面/背面どちらに立っているかを判定する方法!

レベルBPを開きます。

 

以下のような処理を組みます。

f:id:Free_Gamer:20190729225315p:plain

Qキーを押した時、自分が敵の正面にいるか背面にいるかを判定する処理です。 

 

 

それでは解説していきます。

 

 

f:id:Free_Gamer:20190729225349p:plain

 

敵の前面ベクトルと位置を取得

プレイヤーの位置も取得しています

f:id:Free_Gamer:20190729225424p:plain

↓上から見るとこんな感じですね

 

f:id:Free_Gamer:20190729224344p:plain

赤枠が敵

青枠がプレイヤー

赤矢印が敵の前面ベクトルです。

 

敵の位置と自分の位置から角度を割り出します。

f:id:Free_Gamer:20190729225533p:plain

↓上から見た図です

f:id:Free_Gamer:20190729230716p:plain

この場合、FindLookAtRotationから返される値は
おおよそ「Pitch:135」といったところじゃあないでしょうか。

 

そして、FindLookAtRotationの返した角度を

GetForwardVectorで正規化します。

 

例えば、FindLookAtRotationから返された値が「Pitch:90」だった場合

その値を正規化したら「Y:1」になります。

「Pitch:-90」だった場合は

「Y:-1」です。

 

角度が正の値だった場合正規化される値は「正の値の1」

角度が負の値だった場合正規化されえる値は「負の値の1」

 

になるわけです。

f:id:Free_Gamer:20190729232036p:plain

この場合、正規化された値は、

「X:-0.765362 Y:0.643600」ぐらいです。

 

敵の前面ベクトルと

FindLookAtRotationで求めた角度を正規化した値から

内積を求めます。

 

内積を求めたら

ACOSとかいうよくわからんノード

角度を求めます。(適当w)

f:id:Free_Gamer:20190729232704p:plain

赤矢印が敵の前面ベクトル

黄色矢印がFindLookAtRotationで求めた角度の正規化したベクトル

 

この2つで内積を求める。

そして求めた内積で角度を割り出す。

 

緑色で塗りつぶされているのが角度。

この場合だと、大体「45度」ぐらい。

f:id:Free_Gamer:20190729233245p:plain

 

角度によって正面か背面かを判定

f:id:Free_Gamer:20190729223815p:plain

ACOSdから返された値をInRangeのValueに繋ぐ。

角度が「0~90」だった場合、敵の正面にいると判定

それ以外は背面と判定されるようになっている。

 

これで完了です。

 

それではまた!^^ノシ