在Unity中控制视频播放、暂停、拖拽进度条、显示总时长和当前播放时间,通常会涉及到使用VideoPlayer
组件以及UI元素(如Slider
用于进度条,Text
用于显示时间)。下面是一个详细的步骤和代码示例来实现这些功能。
步骤 1: 创建UI元素
- 在Unity编辑器中,创建一个新的Canvas,并在其中添加以下UI元素:
- VideoPlayer(用于播放视频)
- Slider(用于进度条)
- 2个Text元素(一个用于显示总时长,一个用于显示当前播放时间)
步骤 2: 设置VideoPlayer和Slider
- 将VideoPlayer的Render Mode设置为Overlay或Material Override,具体取决于你的需求。
- 导入一个视频文件,并将其设置为VideoPlayer的Video Clip。
- 将Slider的Min Value设置为0,Max Value设置为视频的总帧数(VideoPlayer.frameCount - 1,因为索引从0开始)。
- 将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编辑器中,将VideoPlayer
、Slider
、总时长Text
和当前时间Text
组件分别拖拽到VideoController
脚本的对应public变量上。
步骤 5: 运行并测试
运行游戏,观察视频播放、暂停、拖拽进度条以及时间显示是否正常工作。
注意事项
- 确保你的视频文件是Unity支持的格式,并且已经正确导入到项目中。
- 在不同的设备和分辨率下测试视频播放效果,以确保兼容性。
- 根据需要添加播放、暂停、停止等其他控制按钮,并编写相应的脚本来处理这些事件。