わかゲームスタジオ

ゲーム制作初心者専門学生の備忘録

Unity 直線から見てある点が左右どちらにあるかを求める

この問題を解決するのにすごく時間がかかったので残しておきます。

敵をロックオンするカメラの実装等に使えると思います。

①考え方

f:id:WakaiGames:20200821213704p:plainf:id:WakaiGames:20200821213746p:plainf:id:WakaiGames:20200821213757p:plain

  1. abベクトルから見て点cが左右どちらにあるかを求めます。
  2. abベクトルacベクトルを求めます。
  3. 2直線の外積を求めれば2直線に直交する方向ベクトルが求められます。これを使ってacベクトルの右方向ベクトルを求めます。
  4. abベクトルと2で求めたベクトルの内積を求めます。
  5. 3の値の正負で左右を判断することができます。

②コードで書いてみる

//基準点からの方向ベクトルを求める
Vector3 ab = b.transform.position - a.transform.position;
//acベクトルの右方向ベクトルを求める
Vector3 acRight = Vector3.Cross(c.transform.position - a.transform.position, a.transform.up);
//内積を求める
float cross = Vector3.Dot(new Vector3(ab.x, 0, ab.z).normalized, new Vector3(acRight.x, 0, acRight.z).normalized);

以上です。意外といろんなところで使うかも、、、?