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
相关产品推荐
相关产品推荐

