You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity视频播放器:如何区分Slider值的手动与自动变更?

解决Unity Slider自动更新触发Seek函数的问题

你可以通过添加一个状态标记变量来区分Slider值的变化是代码自动更新还是用户手动操作触发的,这样就能避免Update里更新Slider时频繁调用SeekVideo函数。

具体实现步骤:

  • 新增一个私有布尔变量,用来标记当前是否是代码在更新Slider
  • 在Update方法更新Slider前后,切换这个标记的状态
  • 在SeekVideo函数开头判断标记,只有非自动更新时才执行跳转逻辑

修改后的代码如下:

// 新增标记变量,标记是否正在通过代码自动更新Slider
private bool _isUpdatingSlider;

public void SeekVideo() {
    // 如果是代码自动更新Slider导致的触发,直接返回
    if (_isUpdatingSlider) return;

    Debug.Log("仅在用户手动拖动时触发");
    float value = slider.value;
    long miliseconds = (long)(GetVideoDuration(videoIndex) * value);
    Seek(0, miliseconds);
}

public void Update() {
    if (isVideoPlayerReady && slider != null) {
        // 更新Slider前标记为自动更新状态
        _isUpdatingSlider = true;
        slider.value = (float)GetVideoPosition(videoIndex) / GetVideoDuration(videoIndex);
        // 更新完成后取消标记
        _isUpdatingSlider = false;
    }
}

原理很直接:当代码在Update里更新Slider值时,先把_isUpdatingSlider设为true,此时Slider的OnValueChange事件触发SeekVideo,函数检测到标记为true就直接跳过跳转逻辑;只有用户手动拖动Slider时,这个标记是false,才会执行视频跳转操作。

这样就能彻底解决每帧调用SeekVideo的资源浪费问题,同时保留用户手动跳转的功能。

内容的提问来源于stack exchange,提问作者Óscar Fernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:03:17