10

Unity で 2 つの 3D ベクター間の実際の角度を計算する方法はありますか? Vector3.Angle は、2 つのベクトル間の最短角度を示します。時計回りに計算された実際の角度を知りたいです。

4

3 に答える 3

20

これはあなたが必要とするものです。 abは、角度を計算するベクトルであり、n「時計回り/反時計回り」と呼ぶものを決定するための平面の法線になります

float SignedAngleBetween(Vector3 a, Vector3 b, Vector3 n){
    // angle in [0,180]
    float angle = Vector3.Angle(a,b);
    float sign = Mathf.Sign(Vector3.Dot(n,Vector3.Cross(a,b)));

    // angle in [-179,180]
    float signed_angle = angle * sign;

    // angle in [0,360] (not used but included here for completeness)
    //float angle360 =  (signed_angle + 180) % 360;

    return signed_angle;
}

簡単にするために、再利用して、平面法線と と の外積 (垂直ベクトル) のVector3.Angle間の角度の大きさから符号を計算します。nab

于 2013-10-30T14:21:03.397 に答える
-8

Try to use Vector3.Angle(targetDir, forward);

Since you want the shortest angle between them, then if the value returned is more than 180 degrees, just subtract 360 degrees with this value.

Check out http://answers.unity3d.com/questions/317648/angle-between-two-vectors.html

于 2013-10-30T06:56:34.487 に答える