按百分比Unity移动滑块时如何移动具有不同最大值的相同数量的滑块
How to move slider same amount with different max values when moving it by a percentage Unity
我有一个滑块,它的最大值根据当前所选音频剪辑的长度而变化。当用户右键单击并在特定区域移动鼠标 left/right 时,我正在更改滑块的值。我希望滑块根据自上一帧以来用户移动鼠标的距离移动 faster/slower。问题是,如果我的剪辑是 135.35 秒,则滑块移动得非常慢。它只适用于 1 秒的剪辑。我想我需要根据我的动作将它移动不同的百分比,但我在正确计算数学方面遇到了很多麻烦。我希望滑块为用户移动鼠标的每个距离值移动相同的距离,而不管最大值是多少。任何和所有的帮助表示赞赏。下面是我当前的代码,但是当剪辑为 1 秒时它移动得太快,而对于 135.35 秒的剪辑来说仍然有点慢。
private void UpdateValue()
{
float DistanceMoved = FingerXPos - PrevFingerXPos;
float PercentageOfScreenMoved = Mathf.Abs(DistanceMoved) / Screen.width;
if (PercentageOfScreenMoved >= 0.005)
{
float percentangeChange = ((100 * PercentageOfScreenMoved) / SliderObj.maxValue);
if (DistanceMoved < 0)//slide to the left
{
SliderObj.value -= (percentangeChange*100);
}
else
{
SliderObj.value += (percentangeChange*100);
}
}
}
滑块 class 有另一个 getter/setter 用于 .value,称为 .normalizedValue,顾名思义,它将滑块的最小值和最大值之间的范围映射到 0-1。
所以,你可以使用这个:
float DistanceMoved = FingerXPos - PrevFingerXPos;
float PercentageOfScreenMoved = Mathf.Abs(DistanceMoved) / Screen.width;
if (PercentageOfScreenMoved >= 0.005)
{
SliderObj.normalizedValue += DistanceMoved/Screen.width;
}
我有一个滑块,它的最大值根据当前所选音频剪辑的长度而变化。当用户右键单击并在特定区域移动鼠标 left/right 时,我正在更改滑块的值。我希望滑块根据自上一帧以来用户移动鼠标的距离移动 faster/slower。问题是,如果我的剪辑是 135.35 秒,则滑块移动得非常慢。它只适用于 1 秒的剪辑。我想我需要根据我的动作将它移动不同的百分比,但我在正确计算数学方面遇到了很多麻烦。我希望滑块为用户移动鼠标的每个距离值移动相同的距离,而不管最大值是多少。任何和所有的帮助表示赞赏。下面是我当前的代码,但是当剪辑为 1 秒时它移动得太快,而对于 135.35 秒的剪辑来说仍然有点慢。
private void UpdateValue()
{
float DistanceMoved = FingerXPos - PrevFingerXPos;
float PercentageOfScreenMoved = Mathf.Abs(DistanceMoved) / Screen.width;
if (PercentageOfScreenMoved >= 0.005)
{
float percentangeChange = ((100 * PercentageOfScreenMoved) / SliderObj.maxValue);
if (DistanceMoved < 0)//slide to the left
{
SliderObj.value -= (percentangeChange*100);
}
else
{
SliderObj.value += (percentangeChange*100);
}
}
}
滑块 class 有另一个 getter/setter 用于 .value,称为 .normalizedValue,顾名思义,它将滑块的最小值和最大值之间的范围映射到 0-1。
所以,你可以使用这个:
float DistanceMoved = FingerXPos - PrevFingerXPos;
float PercentageOfScreenMoved = Mathf.Abs(DistanceMoved) / Screen.width;
if (PercentageOfScreenMoved >= 0.005)
{
SliderObj.normalizedValue += DistanceMoved/Screen.width;
}