Unity3d 同一字符上的多个旋转
我有一个角色在移动的方向上旋转Unity3d 同一字符上的多个旋转,unity3d,rotation,character,transform,Unity3d,Rotation,Character,Transform,我有一个角色在移动的方向上旋转 var rot = (x, y, z); //motion vector rot.y = 0f; var movementRot = Quaternion.LookRotation(rot); transform.rotation = Quaternion.Lerp(transform.rotation, movementRot, Time.deltaTime * speedRot);} 我想旋转它的Y轴旋转,甚至与鼠标的X轴 loat r = Inpu
var rot = (x, y, z); //motion vector
rot.y = 0f;
var movementRot = Quaternion.LookRotation(rot);
transform.rotation = Quaternion.Lerp(transform.rotation, movementRot, Time.deltaTime * speedRot);}
我想旋转它的Y轴旋转,甚至与鼠标的X轴
loat r = Input.GetAxisRaw("Mouse X");
float Xrot = Input.GetAxisRaw("Mouse X") * speedRotation;
transform.Rotate(0, Xrot, 0);
这些方法单独起作用,但结合起来却不起作用。
我已经尝试将“变换.旋转”转换为四元数进行乘法:
var Xrotation = Quaternion.Euler(0f, Xrot, 0f);
transform.rotation = Xrotation * movementRot;
结果是一个字符本身不旋转(尝试时会被保留)。
我尝试了逆运算,并将四元数转换为度以添加到变换中。旋转但这没有帮助:
float angle = Quaternion.Angle(transform.rotation, movementRot)//The result is perfect is on its own on transform.Rotate it works
transform.Rotate(0,f angle + Xrot, 0f); //Together, however, the character rotates at times and turns, on itself only to one side
有人知道怎么做吗。。?(或者如果可以做xd)正如我得到的,您希望有两个旋转层-首先,您的角色朝运动方向看。然后,可以通过鼠标输入添加旋转。是这样吗 如果是这样的话,我可以推荐的第一件事就是把你的角色分成两个对象。父变换将跟随您的移动。然后,它的子对象将根据鼠标输入更改其局部旋转 对于后续旋转,IMHO,最好的方法是处理向量,而不是四元数:
transform.forward = movementVector;
如果您需要更平滑的以下操作,您可以这样做:
float rotationSpeed = 0.5f;
transform.forward = Vector3.RotateTowards(transform.forward, movementVector, rotationSpeed * Time.deltaTime, 0);
float Xrot = Input.GetAxisRaw("Mouse X") * speedRotation;
transform.forward += transform.right * Xrot * Time.deltaTime;
或
然后,您可以将旋转应用于子对象,就像您所做的那样(仅更改-应用为局部旋转)
如果这种类型的装备不适合您,则需要组合两个旋转。对于这一点,再次处理向量。应用移动跟随旋转后,如上所述,添加如下内容:
float rotationSpeed = 0.5f;
transform.forward = Vector3.RotateTowards(transform.forward, movementVector, rotationSpeed * Time.deltaTime, 0);
float Xrot = Input.GetAxisRaw("Mouse X") * speedRotation;
transform.forward += transform.right * Xrot * Time.deltaTime;
注意两件事:
- 在这种情况下,
可能要小得多。你甚至可以把它乘以0.1fspeedRotation
和transform.right
对于您的角色可能不同,可能需要使用transform.forward
或transform.up
。请参见局部变换轴-transform.forward
让我解释一下。我试图在不依赖摄影机的情况下创建第三人称动作(摄影机必须跟随角色)。因此,除了在其行走方向上的正常旋转外,我还必须使用鼠标插入旋转(以在我想要的方向上旋转角色,否则它只能向前、向后、向右和向左移动而不旋转)。很抱歉出现这样的延迟。那么,为什么不能使用“钻机”方法呢?创建跟随角色移动的摄影机。然后,将相机从游戏对象中移除——让它只是一个假人。把你的相机当成这个假人的孩子。然后,将鼠标驱动的旋转应用于此子摄影机,而不是作为
变换.rotation
,而是作为变换.localRotation
。如果我理解正确,很遗憾,您的解决方案对我不起作用,因为当我的角色水平行走时,摄影机不能在其后面,而是要框定角色侧向行走。当我垂直行走和旋转时,相机应该只旋转并站在后面。或者,充其量,我想要一个横向行走被框起来的解决方案。但我不确定使用哪种方法。在任何情况下,在旋转我的角色的时候,我用一个立方体的移动来引导这个角色的移动。使用鼠标,立方体旋转,因此水平轴和垂直轴在世界各地移动。我的角色朝着移动的方向旋转,当他行走时,如果我使用鼠标,它会旋转,因为它朝着旋转的立方体的轴移动。相机设置为立方体旋转,但旋转速度比角色慢,因此效果就像角色跟随它。一个复杂的解决方案,你觉得有用吗。。?如果你的更简单,我想用它。