IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity封装VideoPlyaer组件包含全屏+静音+进度条+时长显示 -> 正文阅读

[游戏开发]Unity封装VideoPlyaer组件包含全屏+静音+进度条+时长显示

说明

??最近开发时需要播放视频,回忆以前做过的项目,好多都有在Unity3D中播放视频,每次都是自己重新实现一些功能,类似与进度条拖动,显示时长等等。今天就是将其封装一下,以后再用到直接拿来用。

包含的功能:

  • 视频进度条,可点击进度条,拖动进度条
  • 点击视频实现视频播放与停止
  • 全屏显示
  • 静音
  • 显示视频时长

播放界面:
在这里插入图片描述
脚本挂载:
在这里插入图片描述
EventTrigger:
在这里插入图片描述
全屏按钮和静音按钮同理:
在这里插入图片描述

主要脚本

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class HK_VideoCtrl : MonoBehaviour
{
    [Header("VideoPlayer组件:")]
    public VideoPlayer videoPlayer;
    [Header("视频拖动条:")]
    public Slider video_Slider;
    [Header("VideoBG_TRF组件:")]
    public RectTransform VideoBG_TRF;
    [Header("视频播放提示:")]
    public Image pause_Img;
    [Header("视频关闭按钮:")]
    public Button close_Btn;
    //鼠标抬起或按下
    bool mouseUp = true;
    bool isPause = false;

    [Header("全屏按钮:")]
    public Button fullScreen_Btn;
    [Header("全屏按钮精灵:")]
    public Sprite fullScreen_Sprite;
    [Header("非全屏按钮精灵:")]
    public Sprite notFullScreen_Sprite;
    [Header("全屏按钮提示文本:")]
    public Text fullScreen_Txt;
    bool isFullScreen = false;

    [Header("静音按钮:")]
    public Button mute_Btn;
    [Header("静音按钮精灵:")]
    public Sprite mute_Sprite;
    [Header("非静音按钮精灵:")]
    public Sprite notMute_Sprite;
    [Header("静音按钮提示文本:")]
    public Text mute_Txt;
    bool isMute = false;

    [Header("视频时长:")]
    public Text videoTime_Txt;
    //视频时长
    int clipHour, clipMinute, clipSecond, currentHour, currentMinute, currentSecond;

    void Start()
    {
        close_Btn.onClick.AddListener(OnClickCloseBtn);

        video_Slider.onValueChanged.AddListener( SliderValueChangeEvent);

        fullScreen_Btn.onClick.AddListener(OnClickFullScreenBtn);
        mute_Btn.onClick.AddListener(OnClickMuteBtn);
        videoPlayer.targetTexture.Release();

        isFullScreen = false;
        isMute = false;

        clipMinute = (int)(videoPlayer.clip.length) / 60;
        clipSecond = (int)(videoPlayer.clip.length - clipMinute * 60);
    }

    void OnEnable()
    {
        pause_Img.gameObject.SetActive(false);
    }

    void Update()
    {
        SetVideoTime();
    }

    void FixedUpdate()
    {
        if (mouseUp)
            video_Slider.value = videoPlayer.frame / (videoPlayer.frameCount*1.0f);

    }
    //设置视频时间 
    void SetVideoTime()
    {
        currentMinute = (int)(videoPlayer.time) / 60;
        currentSecond = (int)(videoPlayer.time - currentMinute * 60);
        videoTime_Txt.text = string.Format("{0:D2}:{1:D2} / {2:D2}:{3:D2}", currentMinute, currentSecond, clipMinute, clipSecond);
    }

    //关闭视频面板
    void OnClickCloseBtn()
    {
        gameObject.SetActive(false);

        fullScreen_Txt.text = "全 屏";
        fullScreen_Btn.GetComponent<Image>().sprite = fullScreen_Sprite;
        VideoBG_TRF.sizeDelta = new Vector2(1511, 950);
        isFullScreen = false;

        videoPlayer.SetDirectAudioMute(0, false);
        mute_Btn.GetComponent<Image>().sprite = notMute_Sprite;
        mute_Txt.text = "静 音";
        isMute = false;
    }

    //全屏
    void OnClickFullScreenBtn()
    {
        if (isFullScreen)
        {
            VideoBG_TRF.sizeDelta = new Vector2(1511,950);
            fullScreen_Btn.GetComponent<Image>().sprite = fullScreen_Sprite;
            fullScreen_Txt.text = "全 屏";
        }
        else
        {
            VideoBG_TRF.sizeDelta = new Vector2(Screen.width, Screen.height);
            fullScreen_Btn.GetComponent<Image>().sprite = notFullScreen_Sprite;
            fullScreen_Txt.text = "取消全屏";
        }
        isFullScreen = !isFullScreen;
    }

    //静音
    void OnClickMuteBtn()
    {
        if (isMute)
        {
            videoPlayer.SetDirectAudioMute(0, false);
            mute_Btn.GetComponent<Image>().sprite = notMute_Sprite;
            mute_Txt.text = "静 音";
        }
        else
        {
            videoPlayer.SetDirectAudioMute(0, true);
            mute_Btn.GetComponent<Image>().sprite = mute_Sprite;
            mute_Txt.text = "取消静音";
        }
        isMute = !isMute;
    }

    #region EventTrigger相关事件
    //鼠标按下
    public void PointDown()
    {
        videoPlayer.Pause();
        videoPlayer.frame = long.Parse((video_Slider.value * videoPlayer.frameCount).ToString("0."));
        mouseUp = false;
        isPause = false;
    }

    //鼠标抬起
    public void PointUp()
    {
        videoPlayer.Play();
        mouseUp = true;
        pause_Img.gameObject.SetActive(false);
    }    

    //拖动开始
    public void PointDragBegin()
    {
        mouseUp = false;
    }
    //拖动结束
    public void PointDragEnd()
    {
        mouseUp = true;
    }

    //设置视频暂停
    public void SetPauseImg()
    {
        isPause = !isPause;
        pause_Img.gameObject.SetActive(isPause);
        if (!isPause)
            videoPlayer.Play();
        else
            videoPlayer.Pause();
    }
    #endregion

    void SliderValueChangeEvent(float value)
    {
        if (!mouseUp)
        {
            videoPlayer.frame = long.Parse((value * videoPlayer.frameCount).ToString("0."));
        }
    }
}

鼠标移入全屏或静音按钮小标签提示脚本:

using UnityEngine;

public class TipCtrl : MonoBehaviour
{
    [Header("提示标签:")]
    public GameObject tip;

    private void Start()
    {
        tip.SetActive(false);
    }
    public void OnPointEnter()
    {
        tip.SetActive(true);
    }

    public void onPointExit()
    {
        tip.SetActive(false);
    }
}

如有问题或者好的方法,欢迎评论。

下载地址

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-09-20 16:04:04  更:2021-09-20 16:04:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 4:32:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码