您的位置首页百科问答

Unity VideoPlayer 视频名称时间Slider控制进度

Unity VideoPlayer 视频名称时间Slider控制进度

的有关信息介绍如下:

Unity VideoPlayer 视频名称时间Slider控制进度

Unity VideoPlayer 视频名称时间Slider控制进度。本节介绍,在Unity开发中,使用VideoPlayer 播放视频,获取视频的名称,当前播放时间,以及使用 Slider 来显示和控制视频播放进度的方法,具体如下

打开 Unity ,新建一个工程,具体如下图

在工程中导入一个 视频文件,作为待会视频播放文件,具体如下图

在场景中添加 一个 RawImage 作为视频播放的载体,添加2个 Text,分别用来显示视频名称和视频播放时间, 添加一个 Slider,用来显示视频播放进度和控制视频播放进度,合理的布局各个UI元素,具体如下图

在工程中添加两个脚本,ToPlayVideo 脚本用来播放视频使用,SliderEvent 脚本用来控制视频的播放进度,具体如下图

ToPlayVideo 脚本具体代码和代码内容如下

ToPlayVideo 脚本具体内容如下:

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.Video;

public class ToPlayVideo : MonoBehaviour {

public VideoClip videoClip; // 视频的文件 参数

public Text videoTimeText; // 视频的时间 Text

public Text videoNameText; // 视频的名字 Text

public Slider videoTimeSlider; // 视频的时间 Slider

//定义参数获取VideoPlayer组件和RawImage组件

internal VideoPlayer videoPlayer;

private RawImage rawImage;

// Use this for initialization

void Start()

{

//获取场景中对应的组件

videoPlayer = this.GetComponent();

rawImage = this.GetComponent();

videoPlayer.clip = videoClip;

videoNameText.text = videoClip.name;

clipHour = (int)videoPlayer.clip.length / 3600;

clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60;

clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60);

videoPlayer.Play();

}

// Update is called once per frame

void Update()

{

//如果videoPlayer没有对应的视频texture,则返回

if (videoPlayer.texture == null)

{

return;

}

//把VideoPlayerd的视频渲染到UGUI的RawImage

rawImage.texture = videoPlayer.texture;

ShowVideoTime();

}

///

/// 显示当前视频的时间

///

private void ShowVideoTime()

{

// 当前的视频播放时间

currentHour = (int)videoPlayer.time / 3600;

currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;

currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);

// 把当前视频播放的时间显示在 Text 上

videoTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2} / {3:D2}:{4:D2}:{5:D2}",

currentHour, currentMinute, currentSecond, clipHour, clipMinute, clipSecond);

// 把当前视频播放的时间比例赋值到 Slider 上

videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);

}

///

/// 当前的 Slider 比例值转换为当前的视频播放时间

///

private void SetVideoTimeValueChange()

{

videoPlayer.time = videoTimeSlider.value * videoPlayer.clip.length;

}

// 当前视频的总时间值和当前播放时间值的参数

private int currentHour;

private int currentMinute;

private int currentSecond;

private int clipHour;

private int clipMinute;

private int clipSecond;

}

SliderEvent 脚本具体代码和代码内容如下

SliderEvent脚本具体内容如下:

using UnityEngine;

using UnityEngine.EventSystems;

///

/// 继承 拖拽接口

///

public class SliderEvent : MonoBehaviour, IDragHandler

{

[SerializeField]

private ToPlayVideo toPlayVideo; // 视频播放的脚本

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

///

/// 给 Slider 添加 拖拽事件

///

///

public void OnDrag(PointerEventData eventData)

{

SetVideoTimeValueChange();

}

///

/// 当前的 Slider 比例值转换为当前的视频播放时间

///

private void SetVideoTimeValueChange()

{

toPlayVideo.videoPlayer.time = toPlayVideo.videoTimeSlider.value * toPlayVideo.videoPlayer.clip.length;

}

}

脚本编译正确,回到Unity,把 ToPlayVideo 挂载到 RawImage 上并对应赋值,具体如下图

把 SliderEvent 挂载到 VideoTimeSlider 上并对应赋值,具体如下图

运行场景,视频名称,视频播放时间,并可以使用Slider控制播放进度,具体如下图