以度为单位获得角度?

时间:2014-06-06 10:54:20

标签: c# unity3d

我想知道玩家目前的角度是什么。我用谷歌搜索并让它工作

    turn = fAntToCamRotate;
    curDir = (curDir + turn) % 360; // rotate angle modulo 360 according to input

    RaycastHit hit;
    if (Physics.Raycast(target.transform.position, -curNormal, out hit))
    {
        curNormal = Vector3.Lerp(curNormal, hit.normal, 4 * Time.deltaTime);
        Quaternion grndTilt = Quaternion.FromToRotation(Vector3.up, curNormal);
     //GetComponent<CapsuleCollider>().transform.rotation = grndTilt * Quaternion.Euler(0, curDir, 0);
        target.transform.rotation = grndTilt * Quaternion.Euler(0, curDir, 0);

     /*
      * FIX THIS CODE TO KNOW THE ANGEL THE PLAYER IS WALKING ON!!!
     Vector3 test = Vector3.up;
     Vector3 test2 = hit.normal;
     float tester = Vector3.Dot(test.normalized, test2.normalized);
     Debug.Log(tester * (180 / Mathf.PI));
     */
    }

使用此代码,玩家可以跟随地面,因此在沿着斜坡跑步时,它们看起来不再是小距离跳跃。但是,我有两个问题,我希望有人可以帮助我。

  1. 正如你在评论代码中看到的那样,我试图获得玩家当前所走的角度并将其保存在变量中。我的问题是,我得到了这个非常奇怪的值,我不明白为什么。如果我的播放器从平坦的表面移动到25度倾斜的斜坡,则值从平坦(约55)变为角度(约51)。我根本没有得到。有谁知道如何使这成为更容易理解的程度?我想保存这个的原因是我可以判断是否有一个非常陡峭的斜坡,我希望玩家能够滑行。
  2. 我的第二个问题是我有一个空的游戏对象,其中有一个刚体和碰撞盒作为我角色的父亲。相机还是个孩子。我希望身体按照坡度转弯,所以我不再跳下去,但我希望相机不跟随玩家角度,有没有办法解决这个问题?
  3. 对于我的第二个问题,我想我可以在玩了更多的东西后自己解决。但是,如果有人能帮助我解决第一个问题我会喜欢这个问题,我已经尝试了好几个小时没有运气,我不知道为什么这个角度给了我如此奇怪的数字。

1 个答案:

答案 0 :(得分:1)

计算角度是简单的三角函数。

使用:

  angle  = arctan (y/x)

您可以使用Unity中的Math.f来帮助您,它不像.Net Math那样返回浮动而不是双重。

Radians to degree

    Angle * 180/pi