手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-13 14:07:55

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

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

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

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

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

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

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

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

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

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

6、ToPlayVideo 脚本具体内容如下:using UnityEngine;using UnityEngi荏鱿胫协ne.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<VideoPlayer>(); rawImage = this.GetComponent<RawImage>(); 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(); } /// <summary> /// 显示当前视频的时间 /// </summary> 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); } /// <summary> /// 当前的 Slider 比例值转换为当前的视频播放时间 /// </summary> 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;}

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

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

8、SliderEvent脚本具体内容如下:using UnityEngine;using UnityEngin髫潋啜缅e.EventSystems;/// <summary>/// 继承 拖拽接口/// </summary>public class SliderEvent : MonoBehaviour, IDragHandler{ [SerializeField] private ToPlayVideo toPlayVideo; // 视频播放的脚本 // Use this for initialization void Start () { } // Update is called once per frame void Update () { } /// <summary> /// 给 Slider 添加 拖拽事件 /// </summary> /// <param name="eventData"></param> public void OnDrag(PointerEventData eventData) { SetVideoTimeValueChange(); } /// <summary> /// 当前的 Slider 比例值转换为当前的视频播放时间 /// </summary> private void SetVideoTimeValueChange() { toPlayVideo.videoPlayer.time = toPlayVideo.videoTimeSlider.value * toPlayVideo.videoPlayer.clip.length; }}

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

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

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

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

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

Unity VideoPlayer 视频名称时间Slider控制进度
© 手抄报圈