我正在编写第一人称射击风格的相机和角色控制器。我的角色模型非常基础-它是用于身体的矩形和用于头部的立方体。我的头部只有一个关节,因此我可以围绕该关节旋转头部。在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 ...
最佳答案
您说您可以理解为什么会发生这种情况,但这是关于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);
}
关于c# - 如何围绕 body 的上下左右矢量旋转角色的头部?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52238788/