Unity3D自上而下的平面银行计算



目前我正在进行自上而下的平面游戏,所有的移动都是使用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);

这将使平面从当前旋转变为目标旋转,但只是其中的一部分,因此距离越小,速度就越慢。

相关内容

  • 没有找到相关文章

最新更新