首页 文章

如何向上和向右旋转字符's head around the body'?

提问于
浏览
1

我正在写第一人称射击式相机和角色控制器 . 我的角色模型是超级基本的 - 它是身体的矩形和头部的立方体 . 我的头部有一个关节,这样我就可以围绕那个关节旋转头部 . 在Unity中,我将相机锁定在头部,因此无论头部指向何处,相机都会看起来 .

我有一个单独的C#脚本,我正在为角色和头部运动执行所有翻译和旋转 . 我通过Unity编辑器提供了我头部联合的 Transform 脚本 .

我的问题是,无论何时我垂直和水平地转动头部,头部都会开始滚动 . 头部最终会颠倒,或者以任何方向结束 . 我可以理解为什么 - 如果我向左看然后向上看,随后向右看将导致头部以奇数方向旋转以获得真正的头部 - 它将开始执行桶形滚动 .

我尝试更改代码,以便它“旋转”我角色身体的向上和向右矢量,但这似乎没有改变任何东西 . 我仍然经历滚筒滚动 .

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

如何限制我的头部只围绕我角色的向上和向右转向?如果我的角色是倒置的,侧面等等也应该没关系,头部旋转应该如你所期望的那样左右旋转,上下旋转 .

这是我的代码执行头部关节的旋转 . HeadJoint 是移动头部的联合变换 . transform 是字符's transform. In this code, I attempt to rotate the head around the character' s向上和向右的向量,但这似乎仍然产生桶滚动效果...

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 回答

  • 3

    你说你可以理解为什么会发生这种情况,但这是关于gamedev.stackexchange这个主题的great post .
    这里有一个快速解决方法:将头部水平旋转到身体向上矢量(在"body space"中)并垂直旋转头部右侧矢量(在"head space"中) . 这里 headbody 的孩子 .

    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);
    }
    

相关问题