【问题标题】:Weird slider behaviour in Unity (Handle disappearing)Unity 中奇怪的滑块行为(手柄消失)
【发布时间】:2020-06-09 11:41:45
【问题描述】:

所以我在 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 等),滑块会按预期工作并以稳定的速度向前移动,同时仍然允许用户拖动它,但由于某种原因,一旦我使用返回的值通过那个功能它吓坏了。 我只是在这方面不走运吗?

【问题讨论】:

  • 对我来说,您的代码中没有任何问题。我们可以看到 GetVideoPosition 方法吗?
  • 只是return player.time / player.length; 其中playerVideoPlayer
  • 如果你在调用 SilentSet 之前记录 pos 的值,它总是给你一个合适的值?
  • 是的,它始终是一个介于 0 和 1 之间的值,我用各种日志和断言确定了。
  • 似乎播放器在视频尚未准备好时将视频长度报告为 0,这似乎导致了问题(显然除以 0)。但是除法的结果总是在适当的范围内,没有例外,这有点奇怪。

标签: c# unity3d slider


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多