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

Unity Video Player切换视频后提前终止问题解决方案咨询

问题解决方法

这个问题的核心是Unity VideoPlayer切换视频时内部状态未完全重置,再加上单纯依赖isPlaying判断播放结束的逻辑不可靠,导致后续视频错误沿用了第一个视频的结束时间。直接修改你的协程代码即可解决:

StartCoroutine(myPlayTheVideo(myVideoList[myTheOne]));

IEnumerator myPlayTheVideo(VideoClip videoClip) {
    // 切换前先停止当前播放,清空旧视频残留状态
    if (myVideoPlayer.isPlaying) {
        myVideoPlayer.Stop();
    }
    myVideoPlayer.source = VideoSource.VideoClip;
    myVideoPlayer.clip = videoClip;
    
    // 等待视频准备完成
    myVideoPlayer.Prepare();
    while (!myVideoPlayer.isPrepared) {
        yield return null;
    }
    
    // 提前获取当前视频的实际时长,避免读取旧缓存值
    float videoDuration = myVideoPlayer.clip.length;
    myVideoPlayer.Play();
    
    // 用播放进度对比视频时长判断结束,替代单纯依赖isPlaying
    while (myVideoPlayer.time < videoDuration) {
        yield return null;
    }
    
    // 播放结束后主动停止,确保状态干净
    myVideoPlayer.Stop();
}

关键改动说明

  • 重置播放器状态:切换视频前停止当前播放,彻底清除旧视频的进度、计时等残留数据,避免内部逻辑混乱。
  • 替换结束判断逻辑:isPlaying状态偶尔会因视频解码、加载波动提前变为false,直接对比播放时间和视频实际时长,能精准确保播放到视频真正的结束点。
  • 提前获取视频时长:在播放前就拿到当前视频的真实长度,防止后续读取时拿到旧视频的缓存值。

如果仍有异常,可以在设置新clip后额外添加myVideoPlayer.time = 0,强制将播放进度重置到开头,彻底清除旧视频的进度记录。

内容的提问来源于stack exchange,提问作者Raymond Ford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:05