【发布时间】: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;其中player是VideoPlayer -
如果你在调用 SilentSet 之前记录 pos 的值,它总是给你一个合适的值?
-
是的,它始终是一个介于 0 和 1 之间的值,我用各种日志和断言确定了。
-
似乎播放器在视频尚未准备好时将视频长度报告为 0,这似乎导致了问题(显然除以 0)。但是除法的结果总是在适当的范围内,没有例外,这有点奇怪。