如何减少模拟摇杆输入的旋转量的“跳动”

时间:2018-10-03 18:55:37

标签: c# unity3d input rotation controls

我正在制作一个游戏(在Unity中),其中角色有一个围绕它旋转的指针。指针定义了角色移动的方向。

实际上,指针移动的方式感觉非常“跳跃”。我想使其更自然/更流畅,但是我真的不知道如何解决这个问题。

这是我如何围绕播放器旋转指针:

        float x = Input.GetAxis("Horizontal"),
            y = Input.GetAxis("Vertical");

        if (x != 0 || y != 0) 
        {
            toRotate.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Atan2(y, x) * Mathf.Rad2Deg));
        }

我在Update()函数中执行此操作。

toRotateTransform

2 个答案:

答案 0 :(得分:0)

如Sichi所指出的,执行此操作的方法是在旋转上使用Quaternion.LerpQuaternion.Slerp

这很好用。

    float x = Input.GetAxis("Horizontal")
    float y = Input.GetAxis("Vertical");
    float lerpAmount= 10;

    if (x != 0 || y != 0) 
    {
        toRotate.rotation = Quaternion.Lerp(
            toRotate.rotation,
            Quaternion.Euler(new Vector3(0, 0, Mathf.Atan2(y, x) * Mathf.Rad2Deg),
            lerpAmount * Time.deltaTime);
    }

答案 1 :(得分:0)

您也可以使用Quarternion.RotateTowards

float x = Input.GetAxis("Horizontal")
float y = Input.GetAxis("Vertical");
float stepSize = 10 * Time.deltaTime;

if (x != 0 || y != 0) 
{
    var currentRotation = toRotate.rotation;
    var targetEuler = new Vector3(0, 0, Mathf.Atan2(y, x) * Mathf.Rad2Deg);
    var targetRotation = Quarternion.Euler(targetEuler);
    toRotate.rotation = Quarternion.RotateTowards(currentRotation, targetRotation, stepSize);
}