素材巴巴 > 程序开发 >

【Unity】代码控制视频的播放(视频播放器-更新)

程序开发 2023-09-07 19:11:25

 结果如上图,之前写过一个使用代码控制视频播放器的Demo,但是好多小伙伴说我附带的链接没法下载,这次我直接做一个完整版的,不用下载,照着一步一步做就能做出来。

之前写了如何设置RawImage进行自动播放,大家可以看一下基础操作这篇文章:,大佬勿怪。

【Unity】在UI界面上显示播放视频_夜梦说开发(VR)的博客-CSDN博客

面板结构如上图。

Bg是背景,rawimage是视频播放图片以及播放器

主要组件Rawimage面板展示:

这次的功能有开始,暂停,重播,音量调节,时间显示,面板关闭,面板开启没有做,大家可以自由发挥。

上代码:

using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.Video;/// 
 /// 视频播放器    对应组件需要创建
 /// 
 public class VideoCrol : MonoBehaviour
 {public static VideoCrol instance;#region/// /// 播放视频的Rawimage/// public GameObject videoImage;/// /// 视频播放器组件/// private VideoPlayer vPlayer;/// /// 开始,暂停,重播按钮/// public Button BtnPlay, BtnPause, BtnReStart;/// /// 视频进度条/// public Slider videoSlider;/// /// 关闭界面按钮/// public Button BtnX;/// /// 视频播放时间显示文本/// public Text NowTime;/// /// 视频总时间显示文本/// public Text TotalTime;/// /// 视频总时长/// private float tt;/// /// 进度条计时时间/// private float Index_t;/// /// 时间的时分秒/// private float hour, min, second;private bool IsPlay = true;/// /// 声音大小进度条/// public Slider voiceSlider;/// /// 声音百分比显示/// public Text audioNum;/// /// 声音播放器/// public AudioSource audioSource;/// /// 声音整体/// public GameObject voiceGameObject;/// /// 喇叭按钮/// public Button voiceBtn;/// /// 控制喇叭是否显示/// bool a = true;#endregion/// /// 视频在Resources下的地址/// const string VideoClip = "这里是视频地址";void Awake(){instance = this;vPlayer = videoImage.GetComponent();SetPlayer((VideoClip)Resources.Load(VideoClip));}/// /// 对外开放的视频播放接口/// /// 视频所在位置的地址public void SetPlayer(VideoClip clip){vPlayer.clip = clip;}/// /// 点击音量按钮,第一次开启,第二次关闭/// public void AudioTrue(){if (a){voiceGameObject.SetActive(true);a = false;}else{voiceGameObject.SetActive(false);a = true;}}public void OnEnable(){voiceGameObject.SetActive(false);BtnReStart.onClick.AddListener(ClickReStart);BtnReStart.onClick.AddListener(ClickReStart);//BtnX.onClick.AddListener(ClickBtnX);BtnPlay.onClick.AddListener(ClickKaishi);BtnPause.onClick.AddListener(ClickZanting);voiceBtn.onClick.AddListener(AudioTrue);}public void OnDisable(){BtnReStart.onClick.RemoveListener(ClickReStart);BtnReStart.onClick.RemoveListener(ClickReStart);//BtnX.onClick.RemoveListener(ClickBtnX);BtnPlay.onClick.RemoveListener(ClickKaishi);BtnPause.onClick.RemoveListener(ClickZanting);voiceBtn.onClick.RemoveListener(AudioTrue);voiceGameObject.SetActive(false);}void Start(){ClickKaishi();//是否自动播放InitVideo();AudioChange();}/// /// 初始化音频音量等内容/// private void InitVideo(){tt = (float)vPlayer.clip.length;videoSlider.maxValue = tt;min = (int)tt / 60;second = (int)tt % 60;string minstr = min < 10 ? "0" + min.ToString() : min.ToString();string secondstr = second < 10 ? "0" + second.ToString() : second.ToString();TotalTime.text = string.Format("{0:D2}:{1:D2}", minstr, secondstr);}void Update(){PlayVideo();ChangeTime((float)vPlayer.time);AudioChange();}/// /// 判断是否播放 同时进度条跟随变换/// private void PlayVideo(){//播放if (IsPlay){vPlayer.Play();Index_t += Time.deltaTime;if (Index_t >= 0.1f){videoSlider.value += 0.1f;Index_t = 0;}}else{vPlayer.Pause();}//进度条到底停止播放if (videoSlider.maxValue - videoSlider.value <= 0.1f){ClickReStart();}}/// /// 更改视频音量,同时赋值给音量文字/// private void AudioChange(){audioSource.volume = voiceSlider.value;audioNum.text = ((int)(voiceSlider.value * 100)).ToString() + "%";}/// /// 开放的改变视频播放进度/// /// public void ChangeVideo(float value){vPlayer.time = value;}/// /// 播放时间显示/// /// void ChangeTime(float value){min = (int)value / 60;second = (int)value % 60;string minstr= min < 10 ? "0" + min.ToString() : min.ToString();string secondstr = second < 10 ? "0" + second.ToString() : second.ToString();NowTime.text = string.Format("{0:D2}:{1:D2}", minstr, secondstr);}/// /// 重播按钮/// public void ClickReStart(){videoSlider.value = 0;vPlayer.time = 0;}/// /// 点击开始按钮/// public void ClickKaishi(){if (videoSlider.value == videoSlider.maxValue){videoSlider.value = 0;}videoImage.SetActive(true);IsPlay = true;BtnPause.gameObject.SetActive(true);BtnPlay.gameObject.SetActive(false);}/// /// 点击暂停按钮/// public void ClickZanting(){IsPlay = false;BtnPause.gameObject.SetActive(false);BtnPlay.gameObject.SetActive(true);}
 }
 

 这个是主要功能脚本,挂在外面的panel上。

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.EventSystems;/// 
 /// 挂载在进度条上
 /// 
 public class SliderChange : MonoBehaviour,IDragHandler,IPointerClickHandler
 {/// /// 拖动改变视频进度/// /// public void OnDrag(PointerEventData eventData){VideoCrol.instance.ChangeVideo(VideoCrol.instance.videoSlider.value);}/// /// 点击改变视频进度/// /// public void OnPointerClick(PointerEventData eventData){VideoCrol.instance.ChangeVideo(VideoCrol.instance.videoSlider.value);}
 }
 

 这个是挂载在视频进度条上的slider,主要是为了让slider可以拖拽。

结果如下图:

代码有些长,大部分都是直接从外面挂载拖拽的,为了方便阅读,添加了注释,希望小白和想借鉴的朋友借鉴一下,UI自行更换哈。。。后面我会发一个打包链接

第一个链接是2017版的

https://download.csdn.net/download/CSDN_6954/29656145

第二个链接是2019版的,还没上传完成,等后续补充一个。

只需要1积分,给大家的福利哈。


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。