Unity3D自上而下的平面倾斜计算

Unity3D top down plane banking calculation

目前我正在开发一款自上而下的平面游戏,所有运动都是使用 X 轴和 Z 轴的 2D。我已经根据操纵杆方向计算出旋转,但是,我希望飞机在转弯时绕其 Y 轴旋转,但我找不到最好的方法。

    if(movementInput)
    {
        localRawInput = rawLSInput;
        InputDirectionCache = rawLSInput;
    }
    else
    {
        localRawInput = InputDirectionCache;
    }

    targetRotation = Quaternion.LookRotation(localRawInput, Vector3.up);
    currentRotation = Quaternion.RotateTowards(currentRotation, targetRotation, currentRotationSpeed);


    Vector3 targetRot = targetRotation.eulerAngles;
    Vector3 currentRot = currentRotation.eulerAngles;

    Vector3 currentDir = currentRotation * transform.forward;
    Vector3 targetDir = targetRotation * transform.forward;

这就是我计算所需旋转的方式。当应用旋转时,速度仅适用于平面的前向(currentRotation 用于设置旋转) 我正在使用 targetDir 和 currentDir 来计算点积和叉积,以尝试获得用于银行的值,但运气不好。

对不起,如果它有点含糊,我不太确定我正在寻找的术语

我建议使用

而不是用轮换做所有这些事情
float xRot = localRawInput.z * turnAmount
float zRot = localRawInput.x * turnAmount;

transform.rotation = Quaternion.Euler(xRot, 0, zRot);

这使得当摇杆向前倾斜时,平面绕其 Z 轴旋转,使其向前倾斜。

如果你想让飞机慢慢停下来更平稳,你可以使用

// turnSpeed must be between 0 and 1
float xRot = Mathf.Lerp(transform.eulerAngles.x, localRawInput.z * turnAmount, turnSpeed);
float zRot = Mathf.Lerp(transform.eulerAngles.z, localRawInput.x * turnAmount, turnSpeed);

transform.rotation = Quaternion.Euler(xRot, 0, zRot);

这会将飞机从当前旋转转向目标旋转,但只有一部分,因此随着距离变小,它会减速。