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);
这会将飞机从当前旋转转向目标旋转,但只有一部分,因此随着距离变小,它会减速。
目前我正在开发一款自上而下的平面游戏,所有运动都是使用 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);
这会将飞机从当前旋转转向目标旋转,但只有一部分,因此随着距离变小,它会减速。