首页 > 解决方案 > Unity 中奇怪的滑块行为(手柄消失)

问题描述

所以我在 UI 中有一个滑块,用于显示视频进度条。出于这个原因,我扩展了常规Slider类,使其也有一个属性来检查它是否被使用(因此用户仍然可以拖动自动更新的句柄)。这是课程:

public class VideoSlider : Slider
{
    public bool IsUsed { get; private set; }
    public void SilentSet(float value)
    {
        Set(value, false);
    }

    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
        IsUsed = true;
    }

    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);
        IsUsed = false;
    }
}

现在,在Update视频控制脚本的功能中,我正在根据视频时间更新滑块:

public void Update()
{
        var pos = (float)ModuleManager.instance.GetVideoPosition();
        if (!videoSlider.IsUsed)
            videoSlider.SilentSet(pos);
}

这就是问题发生的地方:当我这样做时,滑块手柄消失了。我已经检查ModuleManager.instance.GetVideoPosition了多次以确保它返回一个介于 0 和 1 之间的值(这是我的滑块的最小值和最大值),但是一旦我使用从该函数返回的值,句柄就消失了。如果我从字面上使用任何其他值(静态值Time.time等),滑块按预期工作并以稳定的速度向前移动,同时仍然允许用户拖动它,但由于某种原因,一旦我使用该函数返回的值它吓坏了。我只是在这个上不走运吗?

标签: c#unity3dslider

解决方案


当视频尚未准备好时,播放器似乎将视频长度报告为 0,这似乎导致了问题(显然除以 0)。但是除法的结果总是在适当的范围内,没有例外,这有点奇怪。


推荐阅读