【问题标题】:How to move slider same amount with different max values when moving it by a percentage Unity移动滑块时如何以不同的最大值移动滑块相同的量单位百分比
【发布时间】:2019-10-02 22:09:39
【问题描述】:

我有一个滑块,它的最大值会根据当前所选音频剪辑的长度而变化。当用户右键单击并在某个区域向左/向右移动鼠标时,我正在更改滑块的值。我希望滑块根据用户自上一帧以来移动鼠标的距离移动得更快/更慢。问题是如果我的剪辑是 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);
            }
        }
    }

【问题讨论】:

    标签: c# unity3d slider percentage


    【解决方案1】:

    Slider 类有另一个用于 .value 的 getter/setter,称为 .normalizedValue,顾名思义,它将滑块的最小值和最大值之间的范围映射到 0-1。

    所以,你可以使用这个:

    float DistanceMoved = FingerXPos - PrevFingerXPos;
    float PercentageOfScreenMoved = Mathf.Abs(DistanceMoved) / Screen.width;
    if (PercentageOfScreenMoved >= 0.005)
    {
        SliderObj.normalizedValue += DistanceMoved/Screen.width;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      相关资源
      最近更新 更多