public class Speedometer : MonoBehaviour
{
public float zeroRate = 3f;
[SerializeField] PlayerController vehicle;
void Update()
{
if (vehicle.IsOnGround())
{
float zRot = ((vehicle.speed * 2.237f) / vehicle.maxSpeed) * 180;
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
else
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.identity, zeroRate * Time.deltaTime);
}
}
}
我面临的问题是,针有时会做一个完整的360旋转的方向。Quanternion.identity
. 我可以用一个if条件来检查是否超过180,减去差额的两倍,但这个条件会在每一个 Update()
调用,而且只会用一个仅使用一次的if条件来混乱代码。有没有一个函数可以限制顺时针反时针方向的旋转?
另外,你也可以做一些类似于存储最后一次的 zRot
值,并随着时间的推移降低它,去
private float zRot;
void Update()
{
if (vehicle.IsOnGround())
{
zRot = ((vehicle.speed * 2.237f) / vehicle.maxSpeed) * 180;
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
else
{
if(zRot > 0)
{
zRot -= zeroRate * Time.deltaTime;
// clamp to 0
zRot = Mathf.Max(0, zRot);
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
}
}
只是现在 zeroRate
将在 °/second
而不是 radians/second
在你的版本中。