按百分比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;
}