美文网首页
unity 计算夹角

unity 计算夹角

作者: WOTTOW | 来源:发表于2019-03-06 21:00 被阅读0次

    物体转向,在unity也比较常用。最近在使用时发现有点生疏了。在这里复习复习。

    //求旋转的角度:
    //方法一:这种方式简单,但返回值在[0,180]
       Vector3 targetDir =target.postion- transform.posrion;
       float angle=Vector3.Angle(targetDir ,transform.forward);
    
    //方法二:这种不建议使用,但返回值在[0,180]
     Vector3 targetDir =target.postion  - transform.posrion;
    Quaternion rotation=Quaternion.LookRotation(targetDir)
    transform.Rotation=rotation;
    
    //方法三:这种不建议使用,但返回值在[0,180]
     Vector3 targetDir =target.postion  - transform.posrion;
    float angle=  Mathf.Acos(Vector3.Dot(transform.forward, targetDir )) * Mathf.Rad2Deg;
     transform.localEulerAngles = new Vector3(0, curentRationA + angle, 0);
    
    //方法四:这种时在游览论坛时发现的,可以返回[-180,180]
    /// <summary>
    /// Determine the signed angle between two vectors, with normal 'n'
    /// as the rotation axis.
    /// </summary>
    public static float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n)
    {
      return Mathf.Atan2(
          Vector3.Dot(n, Vector3.Cross(v1, v2)),
          Vector3.Dot(v1, v2)) * Mathf.Rad2Deg;
    }
    
    //方法五:可以返回[-180,180]
    private void GetAngleB()
        {
            Vector3 targetDir = target.position - transform.position;
            //lhs   rhs
          //  float angle = Vector3.Angle(targetDir, transform.forward);
    
            Vector3 velocity = Quaternion.Inverse(transform.rotation) * targetDir; //对目标向量进行反向旋转,得到的新向量与z轴的夹角即为目标向量与当前物体方向的夹角       
            float angle = Mathf.Atan2(velocity.x, velocity.z) * Mathf.Rad2Deg; //返回tan值为x/z的角的弧度,再转化为度数。
            print("角度B:" + angle);
        }
    

    相关文章

      网友评论

          本文标题:unity 计算夹角

          本文链接:https://www.haomeiwen.com/subject/zfqfpqtx.html