Unity中如何使用VideoPlayer从特定时间点启动视频?
Unity VideoPlayer 从特定时间点启动播放的实现方法
当然可以实现这个功能,核心是通过设置VideoPlayer的time属性指定起始播放位置,但要注意视频资源的加载状态,否则设置可能无效。以下是具体实现步骤和代码示例:
关键注意点
- 必须等待视频准备完成(资源加载/缓冲完毕)后再设置起始时间,否则设置会被忽略
- 确保设置的起始时间不超过视频总时长
videoPlayer.length
代码实现示例
创建一个C#脚本挂载到包含VideoPlayer组件的GameObject上:
using UnityEngine; using UnityEngine.Video; public class VideoStartAtSpecificTime : MonoBehaviour { [SerializeField] private VideoPlayer _videoPlayer; [SerializeField] private float _startTime = 30f; // 目标起始时间(秒) private void Start() { // 检查视频是否已准备完成 if (!_videoPlayer.isPrepared) { // 监听准备完成事件,准备好后再设置起始时间 _videoPlayer.prepareCompleted += OnVideoPrepared; _videoPlayer.Prepare(); } else { SetStartTimeAndPlay(); } } private void OnVideoPrepared(VideoPlayer player) { SetStartTimeAndPlay(); // 移除监听避免重复触发 player.prepareCompleted -= OnVideoPrepared; } private void SetStartTimeAndPlay() { // 校验起始时间的合法性 if (_startTime <= _videoPlayer.length) { _videoPlayer.time = _startTime; _videoPlayer.Play(); } else { Debug.LogWarning("指定的起始时间超过视频总时长,将从开头播放"); _videoPlayer.Play(); } } }
额外提示
- 网络视频处理:如果播放的是网络视频,除了等待准备完成,可能还需要等待一定的缓冲进度(可通过
videoPlayer.frameReady或监听缓冲进度),否则设置时间后可能会回退到已缓冲的起始位置 - 播放中跳转:如果需要在视频播放过程中跳转到特定时间,直接设置
videoPlayer.time = 目标时间即可,无需重新调用Prepare - 时间参考切换:可以通过
videoPlayer.timeReference选择时间参考类型(默认是TimeReference.PlayerTime,也可切换为FrameCount按帧跳转)
内容的提问来源于stack exchange,提问作者ElRosbif
相关产品推荐
相关产品推荐

