Unity 使用VideoPlayer播放视频,实现播放,暂停,快进的效果

 

1. 首先先创建一个Render TexTure   在创建一个RawImage,

再把创建好的Render TexTure (我是随意起的名字,你们自己看着起) ,挂载到 RawImage 的Texture的地方  如下图所示

 

 

 

 

 

 2.在创建Video Player组件  把Render Texture 挂上去(挂在Target Texture上面),Video Clip (可以直接把视频拖上去,也可以写脚本控制)       如下图 

 

 

3.在给滑动条加上Event Trigger 组件,用一个开始拖拽的方法,一个结束拖拽的方法即可

   两个方法在脚本里写的有,拖拽在上面即可

 

 

 

 

 

 

 下面上代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class ShuiWenZhiShiButton : MonoBehaviour
{
   
    public GameObject  mv_obj;  
    public VideoClip shipin1,shipin2;
    public VideoPlayer videoPlayer;

    public Button play_button;   //播放按钮
    public Button pause_button;  //暂停按钮
    public Text mv_length_text;   //显示视频的长度
    public Slider slider_kuajin;
    private bool isDrag;
    private int hour, minute, second;  // 时  分  秒
    // Start is called before the first frame update
    void Start()
    {
      
        Debug.Log (shipin1.length);
        //按钮1
        button[0].onClick.AddListener(delegate
        {
            Photoenlable(0);
            if (mv_obj.activeSelf==false)
            {
                OnorOff_MVjiemian(true);
            }
           
            videoPlayer.clip = shipin1;

        });
        //按钮2
        button[1].onClick.AddListener(delegate
        {
            Photoenlable(1);
            if (mv_obj.activeSelf == false)
            {
                OnorOff_MVjiemian(true);
            }
            videoPlayer.clip = shipin2;

        });
        //按钮3
        button[2].onClick.AddListener(delegate
        {
            Photoenlable(2);
        });

    }
   //打开或者关闭视频界面
    public void OnorOff_MVjiemian(bool tra)
    {
        mv_obj.SetActive(tra);
    }
    //视频播放
    public void  MV_Play()
    {
        play_button.gameObject.SetActive(false);
        pause_button.gameObject.SetActive(true);
        videoPlayer.Play();
    }
    //视频暂停
    public void MV_Pause()
    {
        play_button.gameObject.SetActive(true);
        pause_button.gameObject.SetActive(false);
        videoPlayer.Pause();
    }
    //显示视频的时间
    public void ShiPin_Length()
    {
        hour = (int)videoPlayer.time / 3600;
        minute = ((int)videoPlayer.time  - hour * 3600) / 60;
        second = (int)videoPlayer.time - hour * 3600 - minute * 60;
        mv_length_text.text = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
    }
    /// 修改视频播放进度  
    private void ChangeVideoPlayTime()
    {
        if (isDrag == true)
        {
           videoPlayer.time = slider_kuajin.value*videoPlayer.clip.length;
        }
    }

    //修改进度条
    public void XiuGaiJinDuTiao()
    {
        if (!isDrag)
        {         
            slider_kuajin.value = (float)(videoPlayer.time / videoPlayer.clip.length);
        }
    }
    //开始拖拽
    public void OnDragdrop()
    {
        isDrag = true;
    }
    //结束拖拽
    public void OnEndDrag()
    {
        isDrag = false;
        videoPlayer .time = slider_kuajin.value* videoPlayer.clip.length;

    }
    // Update is called once per frame
    void Update()
    {
        if (videoPlayer.clip !=null)
        {
            ChangeVideoPlayTime();
            XiuGaiJinDuTiao();
            ShiPin_Length();
        }
        
    }
}

 

 2.UI摆放结构

 

 

 

 脚本挂在父物体上

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class Video_Player : MonoBehaviour
{
    public GameObject mv_obj;
    public VideoClip shipin1;
    public VideoPlayer videoPlayer;

    public Button play_button;   //播放按钮
    public Button pause_button;  //暂停按钮
    public Button exit_button;   //关闭界面
    public Text mv_length_text;   //显示视频的长度
    public Slider slider_kuajin;
    private bool isDrag;
    private int hour, minute, second;  // 时  分  秒
    // Start is called before the first frame update
    void Start()
    {
        //videoPlayer = this.GetComponent<VideoPlayer>();
        Debug.Log(shipin1.length);
        videoPlayer.clip = shipin1;
        videoPlayer.Play();
        play_button.onClick.AddListener(MV_Play);
        pause_button.onClick.AddListener(MV_Pause);
        exit_button.onClick.AddListener(delegate {
            OnorOff_MVjiemian(false);
        });
    }
    //打开或者关闭视频界面
    public void OnorOff_MVjiemian(bool tra)
    {
        mv_obj.SetActive(tra);
    }
    //视频播放
    public void MV_Play()
    {
        play_button.gameObject.SetActive(false);
        pause_button.gameObject.SetActive(true);
        videoPlayer.Play();
    }
    //视频暂停
    public void MV_Pause()
    {
        play_button.gameObject.SetActive(true);
        pause_button.gameObject.SetActive(false);
        videoPlayer.Pause();
    }
    //显示视频的时间
    public void ShiPin_Length()
    {
        hour = (int)videoPlayer.time / 3600;
        minute = ((int)videoPlayer.time - hour * 3600) / 60;
        second = (int)videoPlayer.time - hour * 3600 - minute * 60;
        //mv_length_text.text = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
    }
    /// 修改视频播放进度  
    private void ChangeVideoPlayTime()
    {
        if (isDrag == true)
        {
            videoPlayer.time = slider_kuajin.value * videoPlayer.clip.length;
        }
    }

    //修改进度条
    public void XiuGaiJinDuTiao()
    {
        if (!isDrag)
        {
            slider_kuajin.value = (float)(videoPlayer.time / videoPlayer.clip.length);
        }
    }
    //开始拖拽
    public void OnDragdrop()
    {
        isDrag = true;
    }
    //结束拖拽
    public void OnEndDrag()
    {
        isDrag = false;
        videoPlayer.time = slider_kuajin.value * videoPlayer.clip.length;

    }
    // Update is called once per frame
    void Update()
    {
        if (videoPlayer.clip != null)
        {
            ChangeVideoPlayTime();
            XiuGaiJinDuTiao();
            //ShiPin_Length();
        }

    }
}

 

根据自己需要修改即可,感谢阅读

 

posted @ 2020-10-13 15:53  剑起苍穹  阅读(9917)  评论(0编辑  收藏  举报
/*鼠标点击特效*/