C# 如何旋转字符';将头绕在身体周围';什么是正确的向量?
我正在写一个第一人称射击风格的相机和角色控制器。我的角色模型是超基本的-它是一个长方形的身体和立方体的头部。我的头部有一个关节,这样我就可以绕着这个关节旋转头部。在Unity中,我将相机锁定在头部,这样无论头部指向何处,相机都可以看到 我有一个C#脚本,在这个脚本中,我执行角色和头部运动的所有平移和旋转。我通过Unity编辑器提供头部关节的C# 如何旋转字符';将头绕在身体周围';什么是正确的向量?,c#,unity3d,C#,Unity3d,我正在写一个第一人称射击风格的相机和角色控制器。我的角色模型是超基本的-它是一个长方形的身体和立方体的头部。我的头部有一个关节,这样我就可以绕着这个关节旋转头部。在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
指的是什么对象?头,身体,整个角色…?整个角色。这是我角色的主要游戏对象。我刚刚更新了原始帖子,将我的脚本代码的链接全部包含进去。我原来忘了包括在内。