2016-08-07 4 views
0

私はraycas(Vector3.Angle(hit.normal、-transform.forward))の間の角度をチェックする方法を知っていますが、私の問題は、常に小さな角度を返すことです(私はそれが数学的に正しいことを知っています、 )。私はそれを使って自分の車がどちら側に向かうべきかを判断しています。説明するのは難しいので、私は画像を使用します: raycast この2つのレイキャストは同じ角度を返すでしょう。私は1つをbo 45 *ともう1つの-45 *にします。実際には私は正確な値は必要ありません.1と-1も良いでしょう(私は正確な角度ではなく側面のみを知る必要があります)。レイキャストとサーフェスの角度を確認する方法は?

+0

これは非常に困難です。私はちょうど別の方法を見つけるだろう。たとえば、「左」(または「西」など)にあるかどうかを簡単にチェックします。これは簡単です。 – Fattie

+0

もう少し説明できますか?この壁はどの方向にも回転できるので、これはうまくいきません。 –

答えて

1

私はこれがあなたの問題のお手伝いをしますが、あなたの例を見ると、それはあなたのために働く可能性がある場合は、完全にわからない:

pic

変更した絵を見たとき、私が追加しましたベクトルUであり、赤いベクトルにはL(およびR)という名前が付けられ、壁(ヒットポイント、垂直線で示される)から矩形に向かって指しています。ベクトルUは壁に関連付けられた固定方向のベクトルです(実行時に変化しません)。今LU(またはRU)を服用

あなたは線の起源は、内積を使用してヒットポイントの前での背後にあるかどうかを判断することができます。この例では

、その利回り:あなたは、あなたの角度の符号を決定するために、この情報を使用することができ
Vector3.Dot(L, U) < 0
Vector3.Dot(R, U) > 0

+0

素晴らしいアイデアだけど、私の壁のベクトルウィットの方向を関連付ける方法は本当に分からない。あなたはそれを行う方法を知っていますか、それとも数学的な解決策ですか? –

+0

あなたの壁のモデルをゲームのobejctsローカル軸(例えば右向き)に合わせると、かなり簡単になります。 transform.rightを使用すると、右に向いているローカル(最終的に回転した)軸のワールド空間投影が得られます。あなたのUベクトルとしてこれを使用してください – TheDjentleman

+0

ありがとう!それが私の問題を解決する。他の誰かがMathf.DotではなくVector3.Dotを使用しなければならない場合は、 –

関連する問題