Unity中控制视频播放、暂停、拖拽进度条、显示总时长和当前播放时间

在Unity中控制视频播放、暂停、拖拽进度条、显示总时长和当前播放时间,通常会涉及到使用VideoPlayer组件以及UI元素(如Slider用于进度条,Text用于显示时间)。下面是一个详细的步骤和代码示例来实现这些功能。

步骤 1: 创建UI元素

  1. 在Unity编辑器中,创建一个新的Canvas,并在其中添加以下UI元素:
    • VideoPlayer(用于播放视频)
    • Slider(用于进度条)
    • 2个Text元素(一个用于显示总时长,一个用于显示当前播放时间)

步骤 2: 设置VideoPlayer和Slider

  1. 将VideoPlayer的Render Mode设置为Overlay或Material Override,具体取决于你的需求。
  2. 导入一个视频文件,并将其设置为VideoPlayer的Video Clip。
  3. 将Slider的Min Value设置为0,Max Value设置为视频的总帧数(VideoPlayer.frameCount - 1,因为索引从0开始)。
  4. 将Slider的Value设置为0,表示视频从第一帧开始播放。

步骤 3: 编写脚本来控制视频播放和进度条

创建一个新的C#脚本(例如VideoController.cs),并将其附加到一个游戏对象上(通常是一个空的UI Panel)。

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
using UnityEngine.UI;  
using UnityEngine.Video;  
  
public class VideoController : MonoBehaviour  
{  
    public VideoPlayer videoPlayer; // 拖拽到此VideoPlayer组件  
    public Slider videoSlider;      // 拖拽到此Slider组件  
    public Text totalTimeText;      // 拖拽到此Text组件用于显示总时长  
    public Text currentTimeText;    // 拖拽到此Text组件用于显示当前时间  
  
    private float videoLength; // 视频总时长(秒)  
  
    void Start()  
    {  
        // 获取视频总时长  
        videoLength = videoPlayer.length;  
        // 设置总时长文本  
        totalTimeText.text = TimeUtility.FormatTime(videoLength);  
  
        // 监听视频播放事件以更新UI  
        videoPlayer.prepareCompleted += OnVideoReady;  
        videoPlayer.frameReady += OnFrameReady;  
  
        // 设置Slider监听视频时间  
        videoSlider.onValueChanged.AddListener(OnSliderValueChanged);  
    }  
  
    private void OnVideoReady(VideoPlayer source)  
    {  
        // 视频准备完成后可以开始播放  
        videoPlayer.Play();  
    }  
  
    private void OnFrameReady(VideoPlayer source, long frameIdx)  
    {  
        // 更新当前时间文本  
        currentTimeText.text = TimeUtility.FormatTime(source.time);  
  
        // 更新Slider的Value以匹配视频的当前帧  
        videoSlider.value = (int)(source.frame * videoSlider.maxValue / videoPlayer.frameCount);  
    }  
  
    private void OnSliderValueChanged(float value)  
    {  
        // 当Slider的值改变时,设置视频到相应的帧  
        videoPlayer.frame = (long)(value * videoPlayer.frameCount / videoSlider.maxValue);  
    }  
  
    // 辅助方法用于格式化时间  
    public static string FormatTime(float seconds)  
    {  
        int minutes = (int)Mathf.Floor(seconds / 60);  
        int remainingSeconds = (int)Mathf.Round(seconds % 60);  
        string formatted = minutes.ToString("D2") + ":" + remainingSeconds.ToString("D2");  
        return formatted;  
    }  
  
    // 其他方法,如播放、暂停等可以在此处添加  
    public void PlayVideo() { videoPlayer.Play(); }  
    public void PauseVideo() { if (videoPlayer.isPlaying) videoPlayer.Pause(); }  
}
步骤 4: 将脚本与UI元素关联

在Unity编辑器中,将VideoPlayerSlider总时长Text当前时间Text组件分别拖拽到VideoController脚本的对应public变量上。

步骤 5: 运行并测试

运行游戏,观察视频播放、暂停、拖拽进度条以及时间显示是否正常工作。

注意事项

  • 确保你的视频文件是Unity支持的格式,并且已经正确导入到项目中。
  • 在不同的设备和分辨率下测试视频播放效果,以确保兼容性。
  • 根据需要添加播放、暂停、停止等其他控制按钮,并编写相应的脚本来处理这些事件。
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forever-淡墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值