using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
using DG.Tweening;
public class UIVedioPanel_Ctrl : MonoBehaviour
{
public VideoPlayer videoPlayer = null;
public Button btn_play; //开始 结束
public Button btn_pause; //暂停 继续
public Button btn_pre; //上一个按钮
public Button btn_next; //下一个按钮
public Text text_time; //显示视频的长度
public Slider slider_progress;//显示视频的 进度
public Button btn_mute; // 静音
public Slider slider_volume;// 音量
public RectTransform panelCtrl;
private Vector3 stPos, endPos;
[SerializeField]
private bool isDrag;
private int hour, minute, second; // 时 分 秒
private bool IsPause, IsPlay;
private string curmusicPath;
private List<string> musicList = new List<string>();
private int musicIndex = 0;
private void Awake()
{
musicList.Add(@"E:\webserver\laozhi_server\wwwroot\Vedio\login.mp4");
musicList.Add(@"E:\webserver\laozhi_server\wwwroot\Vedio\被盗妄想.mp4");
curmusicPath = musicList[musicIndex];
videoPlayer = transform.Find("Vedio_BG/mask/Vedio").GetComponent<VideoPlayer>();
panelCtrl = transform.Find("Vedio_BG/mask/panel_Ctrl").GetComponent<RectTransform>();
stPos = endPos = panelCtrl.transform.localPosition;
endPos.y -= panelCtrl.rect.height;
endPos.y -= 10;
btn_play = panelCtrl.Find("Btn_Play")?.GetComponent<Button>();
btn_pause = panelCtrl.Find("Btn_Pause")?.GetComponent<Button>();
btn_pre = panelCtrl.Find("Btn_Pre")?.GetComponent<Button>();
btn_next = panelCtrl.Find("Btn_Next")?.GetComponent<Button>();
text_time = panelCtrl.Find("time")?.GetComponent<Text>();
slider_progress = panelCtrl.Find("Slider")?.GetComponent<Slider>();
btn_mute = panelCtrl.Find("Btn_Mute")?.GetComponent<Button>();
slider_volume = panelCtrl.Find("Slider_Volume")?.GetComponent<Slider>();
btn_mute?.onClick.AddListener(OnMenu);
slider_volume?.onValueChanged.AddListener(OnVolumeChange);
if (slider_volume)
slider_volume.value = videoPlayer.GetDirectAudioVolume(0);
btn_play?.onClick.AddListener(OnPlayer);
btn_pause?.onClick.AddListener(OnPause);
btn_pre?.onClick.AddListener(() => { SwichVedio(false); });
btn_next?.onClick.AddListener(() => { SwichVedio(true); });
slider_progress.onValueChanged.AddListener(OnVedio_Progress);
EventTriggerLinstener_All.Get(slider_progress.gameObject).onBeginDrag = (o) => { BeginDrag(); };
EventTriggerLinstener_All.Get(slider_progress.gameObject).onDrag = (o) => { OnDrag(); };
EventTriggerLinstener_All.Get(slider_progress.gameObject).onEndDrag = (o) => { OnEndDrag(); };
//EventTriggerLinstener.Get(videoPlayer.gameObject).onClick = (o) => { OnClickVedio(); };
transform.Find("returnBtn").GetComponent<Button>().onClick.AddListener(OnReturnBtn);
SetUIPlay(false);
}
public void SetConcent(string curmusicPath, bool isAutoPlay = true, System.Action<bool> OnShowVedioCtrlHandle = null)
{
musicList.Clear();
musicList.Add(curmusicPath);
SetConcent(musicList, isAutoPlay, OnShowVedioCtrlHandle);
}
public void SetConcent(List<string> musicList, bool isAutoPlay = true, System.Action<bool> OnShowVedioCtrlHandle = null)
{
this.musicList = musicList;
this.onShowVedioCtrlHandle = OnShowVedioCtrlHandle;
if (musicList.Count < 1)
return;
musicIndex = 0;
curmusicPath = musicList[musicIndex];
if (isAutoPlay)
OpenVedio(curmusicPath);
OnClickVedio();
}
private void OnDestroy()
{
CancleInvokPanelMove();
}
#region event
private System.Action<bool> onShowVedioCtrlHandle;
private Tween tween;
private void OnClickVedio()
{
CancleInvokPanelMove();
tween = panelCtrl.transform.DOLocalMove(stPos, 1);
Invoke("OnClickVedioOver", 10);
onShowVedioCtrlHandle?.Invoke(true);
}
private void OnClickVedioOver()
{
tween = panelCtrl.transform.DOLocalMove(endPos, 1);
onShowVedioCtrlHandle?.Invoke(false);
}
private void CancleInvokPanelMove()
{
if (IsInvoking("OnClickVedioOver"))
{
CancelInvoke("OnClickVedioOver");
}
if (tween != null)
{
tween.Kill(false);
tween = null;
}
}
protected virtual void OnReturnBtn()
{
gameObject.SetActive(false);
CancleInvokPanelMove();
}
private void OnPlayer()
{
IsPlay = !IsPlay;
if (IsPlay)
{
OpenVedio(curmusicPath);
}
else
{
VideoEnd();
}
}
private void OnPause()
{
SetVedioPause(!IsPause);
}
private void OnMenu()
{
bool isMenu = videoPlayer.GetDirectAudioMute(0);
videoPlayer.SetDirectAudioMute(0, !isMenu);
}
private void OnVolumeChange(float value)
{
videoPlayer.SetDirectAudioVolume(0, value);
}
private void OnVedio_Progress(float value)
{
SetVedioTime2();
}
private void BeginDrag()
{
isDrag = true;
}
private void OnDrag()
{
}
private void OnEndDrag()
{
SetVedioTime();
isDrag = false;
}
#endregion
#region vedio
private void SwichVedio(bool next = true)
{
if (next)
{
musicIndex++;
musicIndex %= musicList.Count;
}
else
{
musicIndex--;
if (musicIndex < 0)
{
musicIndex = musicList.Count - 1;
}
}
curmusicPath = musicList[musicIndex];
VideoEnd();
OpenVedio(curmusicPath);
}
private void OpenVedio(string musicPath)
{
videoPlayer.gameObject.SetActive(true);
videoPlayer.url = musicPath;
//videoPlayer.started += StartVedio;
videoPlayer.prepareCompleted -= StartVedio;
videoPlayer.loopPointReached -= OnVideoEnd;
videoPlayer.prepareCompleted += StartVedio;//加载资源
videoPlayer.loopPointReached += OnVideoEnd;//视频播放结束
videoPlayer.Prepare();
SetUIPlay(true);
}
private void StartVedio(VideoPlayer source)
{
source.Play();
videoPlayer.prepareCompleted -= StartVedio;
//videoPlayer.started -= StartVedio;
}
private void SetVedioPause(bool pause)
{
if (pause)
{
videoPlayer.Pause();
}
else
{
videoPlayer.Play();
}
IsPause = pause;
SetUIPause(pause);
}
private void OnVideoEnd(VideoPlayer vp)
{
videoPlayer.Stop();
SetUIPlay(false);
}
private void VideoEnd()
{
videoPlayer.Stop();
videoPlayer.time = 0;
slider_progress.value = 0;
SetVedioTimeText();
SetUIPlay(false);
}
private void SetUIPlay(bool IsStart)
{
if (btn_play)
{
//play_button.gameObject.SetActive(!IsStart);
//btn_play.GetComponent<Image>().color = IsStart ? Color.green : Color.white;
//btn_play.GetComponentInChildren<Text>().text = IsStart ? "结束" : "开始";
btn_play.transform.Find("play")?.gameObject.SetActive(!IsStart);
btn_play.transform.Find("stop")?.gameObject.SetActive(IsStart);
}
if (slider_progress)
slider_progress.interactable = IsStart;
IsPlay = IsStart;
btn_pause.gameObject.SetActive(IsStart);
IsPause = false;
SetUIPause(IsPause);
}
private void SetUIPause(bool isPause)
{
if (btn_pause)
{
//btn_pause.GetComponent<Image>().color = isPause ? Color.red : Color.white;
//btn_pause.GetComponentInChildren<Text>().text = isPause ? "继续" : "暂停";
btn_pause.transform.Find("pause")?.gameObject.SetActive(isPause);
btn_pause.transform.Find("continue")?.gameObject.SetActive(!isPause);
}
}
private void SetVedioTime2()
{
if (!videoPlayer.isPlaying)
{
videoPlayer.time = slider_progress.value * videoPlayer.length;
SetVedioTimeText();
}
}
private void SetVedioTime()
{
if (isDrag)
videoPlayer.time = slider_progress.value * videoPlayer.length;
}
private void SetVedioSlider()
{
if (!isDrag)
slider_progress.value = (float)(videoPlayer.time / videoPlayer.length);
}
private void SetVedioTimeText()
{
hour = (int)videoPlayer.time / 3600;
minute = ((int)videoPlayer.time - hour * 3600) / 60;
second = (int)videoPlayer.time - hour * 3600 - minute * 60;
text_time.text = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
}
private void Update()
{
if (videoPlayer.isPlaying || isDrag)
{
SetVedioTime();
SetVedioSlider();
SetVedioTimeText();
}
if (Input.anyKeyDown || Input.touchCount > 0)
{
OnClickVedio();
}
}
#endregion
}
unity 视频 播放
于 2023-10-26 17:26:13 首次发布