为了账号安全,请及时绑定邮箱和手机立即绑定

如何围绕身体的上下矢量旋转角色的头部?

如何围绕身体的上下矢量旋转角色的头部?

C#
翻阅古今 2022-01-09 15:05:31
我正在写一个第一人称射击风格的相机和角色控制器。我的角色模型是超级基本的——身体是矩形,头部是立方体。我的头部有一个关节,这样我就可以围绕那个关节旋转头部。在 Unity 中,我将相机锁定在头部,这样无论头部指向哪里,相机都会看到。我有一个 C# 脚本,我在其中执行角色和头部运动的所有平移和旋转。我Transform通过 Unity 编辑器提供了我的头部关节的脚本。我的问题是,每当我在垂直和水平方向旋转头部时,头部都会开始做桶式滚动。头部最终会倒置,或者实际上是任何方向。我可以理解为什么——如果我向左看然后向上看,随后再向右看会导致头部以一个奇怪的方向旋转,对于一个真正的头部来说——它会开始进行桶式滚动。我尝试更改代码,使其“围绕”我角色身体的上下矢量“旋转”,但这似乎并没有改变任何东西。我仍然体验桶滚动。我还尝试将相对空间从自我更改为世界,只要我的角色在世界上直立,就可以“修复它”。如果我的角色开始旋转,那么头部旋转开始看起来很奇怪。我怎样才能限制我的头只绕着我的角色的上下矢量旋转?如果我的角色是颠倒的,在它的侧面等等,头部旋转应该像你期望的那样左右旋转,上下旋转应该没关系。这是我对头部关节执行旋转的代码。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);}编辑:我的意思是将此链接包含到我的脚本代码中...
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您说您可以理解为什么会发生这种情况,但在 gamedev.stackexchange 上有一篇关于此主题的精彩帖子。

这是一个快速修复:围绕身体向上向量水平旋转头部(在“身体空间”中)并围绕头部右向量垂直旋转头部(在“头部空间”中)。这里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);

}


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信