Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何旋转字符';将头绕在身体周围';什么是正确的向量?_C#_Unity3d - Fatal编程技术网

C# 如何旋转字符';将头绕在身体周围';什么是正确的向量?

C# 如何旋转字符';将头绕在身体周围';什么是正确的向量?,c#,unity3d,C#,Unity3d,我正在写一个第一人称射击风格的相机和角色控制器。我的角色模型是超基本的-它是一个长方形的身体和立方体的头部。我的头部有一个关节,这样我就可以绕着这个关节旋转头部。在Unity中,我将相机锁定在头部,这样无论头部指向何处,相机都可以看到 我有一个C#脚本,在这个脚本中,我执行角色和头部运动的所有平移和旋转。我通过Unity编辑器提供头部关节的变换脚本 我的问题是,每当我旋转我的头,无论是垂直还是水平,头部开始做一个桶状滚动。头部会倒过来,或者是朝任何方向。我能理解为什么——如果我向左看然后向上看,

我正在写一个第一人称射击风格的相机和角色控制器。我的角色模型是超基本的-它是一个长方形的身体和立方体的头部。我的头部有一个关节,这样我就可以绕着这个关节旋转头部。在Unity中,我将相机锁定在头部,这样无论头部指向何处,相机都可以看到

我有一个C#脚本,在这个脚本中,我执行角色和头部运动的所有平移和旋转。我通过Unity编辑器提供头部关节的
变换
脚本

我的问题是,每当我旋转我的头,无论是垂直还是水平,头部开始做一个桶状滚动。头部会倒过来,或者是朝任何方向。我能理解为什么——如果我向左看然后向上看,随后再向右看会导致头部以一个奇怪的方向旋转(对于真正的头部来说)——它将开始执行桶形滚动

我尝试更改代码,使其围绕角色身体的向上和向右向量“旋转”,但这似乎没有改变任何东西。我仍然经历着桶的滚动

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

我如何约束我的头只围绕角色的上方向和右方向旋转?不管我的角色是倒立的,还是侧着的,等等,头部的旋转应该像你期望的那样左右、上下旋转

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

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);
}
编辑:


我想在我的脚本代码中包含…

您说您可以理解为什么会发生这种情况,但下面是gamedev.stackexchange上关于这个主题的一个示例。
这里有一个快速修复方法:围绕身体上方向向量(在“身体空间”中)水平旋转头部,并围绕头部右方向向量(在“头部空间”中)垂直旋转头部。这里的
头部
身体
的子部分

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

在您的代码中,
transform
指的是什么对象?头,身体,整个角色…?整个角色。这是我角色的主要游戏对象。我刚刚更新了原始帖子,将我的脚本代码的链接全部包含进去。我原来忘了包括在内。