计算Unity3D中两个向量之间的实际角度

sha*_*enk 10 vector unity-game-engine

有没有办法计算Unity中两个3D矢量之间的实际角度?Vector3.Angle给出两个向量之间的最短角度.我想知道以顺时针方式计算的实际角度.

Jer*_*dak 18

这应该是你需要的. a并且b是您想要计算角度的向量,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;
}
Run Code Online (Sandbox Code Playgroud)

为简单起见我重用Vector3.Angle,然后从平面法线之间的角度的大小计算的符号n和的交叉乘积(垂直矢量)ab.

  • Jedrak的答案很棒,但如果你想获得[0,360]范围内的角度,你必须修改angle360公式(写360而不是180):float angle360 =(signed_angle +**360**)%360; (4认同)