アークによる 2D 衝突検出を実装する必要があります。プレイヤー(黒い点)と敵(赤い点)がいます。プレイヤーは任意の方向に攻撃でき、ヒット エリアは 120 度 (緑の線が示しています) で、特定の半径 (黒の曲線) です。
この検出を達成する方法は?
プレイヤーと敵の間の角度を計算するコードを作成しましたが、プレイヤーの方向ベクトルを使用して弧の内側にあるかどうかを確認する方法がわかりません。
敵との角度と距離を計算します。これを使用して、それらが範囲内にあるかどうかを確認します。
デカルト座標を使用しているため、正方形の領域であれば問題は簡単です。放射座標に変換することで、この問題も簡単になります。
新しい情報で
ベクトル B の長さが長すぎないことを確認してください。
ベクトル間の角度は acos(|AB| / |A||B|) で与えられます。
角度が 60 度 (120 度の半分) 未満の場合、敵は射程内にあります。
「前方」を指す単位長ベクトルがあるとします。そして、潜在的なターゲットを指す単位長ベクトルがあるとしましょう。ターゲットがアーク内にいる場合、
dot(forwardVector, targetVector) >= cosf(arcAngle/2)
.
ベクトルが単位長でない場合、もちろん機能しません。ターゲットが必要な角度内にあるかどうかを確認します。
必要な距離内にあるかどうかを確認するのは簡単でsquaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance
、squaredLength がdot(vector, vector)
.
まず最初に、プレーヤーには方向 (2D ベクトルなど) が必要です。簡単に言うと、最初の緑の線との角度 = もう 1 つの緑の線との角度です。
次の 2 つのチェックを実行する必要があります。
アイデアとしてはこれで十分です。参考になれば幸いです。