如果要使转盘停止时转到到指定位置,应该如何做?
实现思路:
也就是在需要停止的分数的区间范围内,随机一个角度值,然后反推需要在哪个角度开始减速,如果转盘的当前角度和需要开始减速的角度有差值,需要先匀速转到那个角度,然后开始匀减速到需要停止的位置。
实现代码:
计算需要匀速旋转角度的代码
void RandReward()
{
float num = Random.Range(0f, 360f);
Debug.Log(Mathf.FloorToInt(num / 45));
//停止的时候 angularVelocity有速度,所以最终停的位置是
//v = v0 - at -> t = v0/a
//_angle = 0.5f * a * t * t = 0.5f * v0 * v0 /a;
//得到要从哪个角度开始减速
float angle1 = num - (0.5f * angularVelocity * angularVelocity / angularAcceleration % 360);
if (angle1 < 0)
{
angle1 += 360;
}
startSpeedSlowVel = angle1 - angle;
if (startSpeedSlowVel < 0)
{
startSpeedSlowVel += 360;
}
}
点击转盘结束时,需要更改的代码
if(startSpeedSlowVel > 0)
{
startSpeedSlowVel -= angularVelocity * Time.deltaTime;
}
else
{
angularVelocity = Mathf.Max(0, angularVelocity - angularAcceleration * Time.deltaTime);
startSpeedSlowVel = 0;
}
实现效果: