我正在编写第一人称射击风格的相机和角色控制器。我的角色模型非常基础-它是用于身体的矩形和用于头部的立方体。我的头部只有一个关节,因此我可以围绕该关节旋转头部。在Unity中,我已经将相机锁定在头部,这样无论指向哪个头部,相机都可以看到。
我有一个C#脚本,在其中我执行所有字符和头部移动的平移和旋转。我通过Unity编辑器提供了我的头部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 ...
答案 0 :(得分:3)
您说您可以理解为什么会发生这种情况,但这是关于gamedev.stackexchange上这个主题的great post。
这是一个快速解决方案:将头围绕身体向上矢量水平旋转(在“身体空间”中),并围绕头右矢量垂直旋转头部(在“头部空间”中)。这里的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);
}