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

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();
        }
    }
}

额外提示

  1. 网络视频处理:如果播放的是网络视频,除了等待准备完成,可能还需要等待一定的缓冲进度(可通过videoPlayer.frameReady或监听缓冲进度),否则设置时间后可能会回退到已缓冲的起始位置
  2. 播放中跳转:如果需要在视频播放过程中跳转到特定时间,直接设置videoPlayer.time = 目标时间即可,无需重新调用Prepare
  3. 时间参考切换:可以通过videoPlayer.timeReference选择时间参考类型(默认是TimeReference.PlayerTime,也可切换为FrameCount按帧跳转)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:16