代码之家  ›  专栏  ›  技术社区  ›  Ryan

如何围绕身体的向上和向右向量旋转角色的头部?

  •  1
  • Ryan  · 技术社区  · 7 年前

    我有一个C#脚本,我在其中执行角色和头部移动的所有平移和旋转。我提供剧本 Transform 我的头关节通过统一编辑。

    我试着改变代码,让它“旋转”我的角色身体的向上和向右向量,但这似乎没有改变任何东西。我仍然能体验到桶的滚动。

    我也试着改变相对空间,从自我到世界,只要我的性格是站在世界上直立“修复它”。如果我的角色开始旋转,那么头部的旋转看起来就会很奇怪。

    我怎样才能约束我的头只围绕我角色的上方向和右方向旋转?不管我的角色是不是颠倒的,在它的侧面,等等,头部的旋转应该像你期望的那样左右旋转,上下旋转。

    这是我的代码,执行头关节的旋转。 HeadJoint 是移动头部的关节变换。 transform 是角色的变换。在这段代码中,我试图围绕角色的向上和向右向量旋转头部,但这似乎仍然会产生桶形滚动效果。。。

    private void ApplyHeadVerticalRotation()
    {
        var amountX = (-Input.GetAxis("Mouse Y")) * Time.deltaTime * RotationSpeed;
    
        HeadJoint.Rotate(transform.right, amountX);
    }
    
    private void ApplyHeadHorizontalRotation()
    {
        var amountY = Input.GetAxis("Mouse X") * Time.deltaTime * RotationSpeed;
    
        HeadJoint.Rotate(transform.up, amountY);
    }
    

    编辑:

    我想包括 this link

    1 回复  |  直到 7 年前
        1
  •  3
  •   Pluto    7 年前

    你说你能理解为什么会这样,但这里有一个 great post 关于这个话题游戏开发stackexchange.
    head 是个孩子 body

    public Transform body;
    public Transform head;   
    
    public float rotationSpeed; 
    
    void Update()
    {
        var amountX = (-Input.GetAxis("Mouse Y")) * Time.deltaTime * rotationSpeed;
        var amountY =   Input.GetAxis("Mouse X")  * Time.deltaTime * rotationSpeed;
    
        head.Rotate(body.up,    amountY, Space.World);        
        head.Rotate(head.right, amountX, Space.World);
    }