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

这篇具有很好参考价值的文章主要介绍了【Unity】代码控制视频的播放(视频播放器-更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

面板结构如上图。

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

主要组件Rawimage面板展示:

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

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

上代码:

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

/// <summary>
/// 视频播放器    对应组件需要创建
/// </summary>
public class VideoCrol : MonoBehaviour
{
    public static VideoCrol instance;

    #region

    /// <summary>
    /// 播放视频的Rawimage
    /// </summary>
    public GameObject videoImage;

    /// <summary>
    /// 视频播放器组件
    /// </summary>
    private VideoPlayer vPlayer;

    /// <summary>
    /// 开始,暂停,重播按钮
    /// </summary>
    public Button BtnPlay, BtnPause, BtnReStart;

    /// <summary>
    /// 视频进度条
    /// </summary>
    public Slider videoSlider;

    /// <summary>
    /// 关闭界面按钮
    /// </summary>
    public Button BtnX;

    /// <summary>
    /// 视频播放时间显示文本
    /// </summary>
    public Text NowTime;
    /// <summary>
    /// 视频总时间显示文本
    /// </summary>
    public Text TotalTime;
    /// <summary>
    /// 视频总时长
    /// </summary>
    private float tt;
    /// <summary>
    /// 进度条计时时间
    /// </summary>
    private float Index_t;

    /// <summary>
    /// 时间的时分秒
    /// </summary>
    private float hour, min, second;

    private bool IsPlay = true;

    /// <summary>
    /// 声音大小进度条
    /// </summary>
    public Slider voiceSlider;
    /// <summary>
    /// 声音百分比显示
    /// </summary>
    public Text audioNum;
    /// <summary>
    /// 声音播放器
    /// </summary>
    public AudioSource audioSource;
    /// <summary>
    /// 声音整体
    /// </summary>
    public GameObject voiceGameObject;
    /// <summary>
    /// 喇叭按钮
    /// </summary>
    public Button voiceBtn;
    /// <summary>
    /// 控制喇叭是否显示
    /// </summary>
    bool a = true;

    #endregion

    /// <summary>
    /// 视频在Resources下的地址
    /// </summary>
    const string VideoClip = "这里是视频地址";

    void Awake()
    {
        instance = this;
        vPlayer = videoImage.GetComponent<VideoPlayer>();

        SetPlayer((VideoClip)Resources.Load(VideoClip));
    }

    /// <summary>
    /// 对外开放的视频播放接口
    /// </summary>
    /// <param name="path">视频所在位置的地址</param>
    public void SetPlayer(VideoClip clip)
    {
        vPlayer.clip = clip;
    }

    /// <summary>
    /// 点击音量按钮,第一次开启,第二次关闭
    /// </summary>
    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();
    }

    /// <summary>
    /// 初始化音频音量等内容
    /// </summary>
    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();
    }

    /// <summary>
    /// 判断是否播放 同时进度条跟随变换
    /// </summary>
    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();
        }
    }

    /// <summary>
    /// 更改视频音量,同时赋值给音量文字
    /// </summary>
    private void AudioChange()
    {
        audioSource.volume = voiceSlider.value;
        audioNum.text = ((int)(voiceSlider.value * 100)).ToString() + "%";
    }

    /// <summary>
    /// 开放的改变视频播放进度
    /// </summary>
    /// <param name="value"></param>
    public void ChangeVideo(float value)
    {
        vPlayer.time = value;
    }

    /// <summary>
    /// 播放时间显示
    /// </summary>
    /// <param name="value"></param>
    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);
    }

    /// <summary>
    /// 重播按钮
    /// </summary>
    public void ClickReStart()
    {
        videoSlider.value = 0;
        vPlayer.time = 0;
    }

    /// <summary>
    /// 点击开始按钮
    /// </summary>
    public void ClickKaishi()
    {
        if (videoSlider.value == videoSlider.maxValue)
        {
            videoSlider.value = 0;
        }
        videoImage.SetActive(true);
        IsPlay = true;
        BtnPause.gameObject.SetActive(true);
        BtnPlay.gameObject.SetActive(false);
    }

    /// <summary>
    /// 点击暂停按钮
    /// </summary>
    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;

/// <summary>
/// 挂载在进度条上
/// </summary>
public class SliderChange : MonoBehaviour,IDragHandler,IPointerClickHandler
{
    /// <summary>
    /// 拖动改变视频进度
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        VideoCrol.instance.ChangeVideo(VideoCrol.instance.videoSlider.value);
    }

    /// <summary>
    /// 点击改变视频进度
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerClick(PointerEventData eventData)
    {
        VideoCrol.instance.ChangeVideo(VideoCrol.instance.videoSlider.value);
    }
}

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

结果如下图:

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

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

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

第一个链接是2017版的

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

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

只需要1积分,给大家的福利哈。文章来源地址https://www.toymoban.com/news/detail-490636.html

到了这里,关于【Unity】代码控制视频的播放(视频播放器-更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • html5视频播放器代码调用实例(视频切换\倍速切换)

    本文将对视频播放相关的功能进行说明,包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。  图 / html5视频播放器调用效果(倍速切换)    图 / html5视频播放器

    2024年02月07日
    浏览(53)
  • html5网页播放器视频切换、倍速切换、视频预览的代码实例

     本文将对视频播放相关的功能进行说明,包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。  图 / html5视频播放器调用效果(倍速切换) Polyv Web播放器同时支持

    2024年02月13日
    浏览(58)
  • 音乐播放器蜂鸣器ROM存储歌曲verilog,代码/视频

    名称:音乐播放器蜂鸣器ROM存储歌曲 软件:Quartus 语言:Verilog 代码功能:        设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件, 简谱存储在ROM中,共2首歌曲。      《茉莉花》的简谱存

    2024年02月04日
    浏览(50)
  • html5视频播放器代码实例(含倍速、清晰度切换、续播)

    本文将对视频播放相关的功能进行说明(基于云平台),包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。  图 / html5视频播放器调用效果(倍速切换)    图

    2024年02月06日
    浏览(40)
  • 【Xgplayer】xgplayer基本使用 | xgplayer使用 | 超好的前端视频播放器 | xgplayer前端最好视频播放器

    开发团队——字节跳动,字节跳动出品,必属精品。 xgplayer是一个超级牛逼的前端视频播放器,以下几个观点足以证明它的强大 大厂出品——稳 简洁 实用 优雅 文档清晰明了 支持弹幕 对移动端非常友好 自定义插件方便且强大 强就是了 xgplayer官网-点我进入 备用地址 https:

    2024年02月06日
    浏览(74)
  • 阿里云视频播放器

    阿里云的视频播放器类比 HTML5视频播放标签video和音频播放标签audio标签 只是阿里云视频播放器是针对阿里云上传的视频进行多功能配置和操作。 最终:阿里云视频播放器就是基于阿里云视频的前端播放标签 阿里云播放器 SDK ( ApsaraVideo Player SDK)是阿里视频服务的重要一环

    2023年04月09日
    浏览(58)
  • 学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。

    (1)设计一个初始界面,并且设置电子相册,音乐播放器,视频播放器三个触摸按键。 (2)电子相册——能够实现相册的幻灯片功能,实现相册左右滑动切换相片。 (3)音乐播放器实现——切歌,播放和暂停功能。 (4)视频播放器实现——播放、暂停、音量大小、快进倒

    2024年02月11日
    浏览(49)
  • 电脑自带播放器怎么倍速播放视频

    1.选择视频文件,鼠标右击在打开方式中选择Windows Media Player播放器打开视频 2. 在Windows Media Player视频播放器中鼠标右击选择“播放速度设置”,再选择增强功能即可调整播放速度了。    

    2024年02月11日
    浏览(46)
  • 【Vue】播放flv格式视频(flv.js视频播放器)

     图片来源:HTTP-FLV直播初探   github地址:GitHub - bilibili/flv.js: HTML5 FLV Player npm install flv.js --save 封装一个组件flvVideo hasAudio设置为true就不展示。。。不知道为啥~ home.vue 参考:Vue 中使用flv.js视频播放器

    2024年02月14日
    浏览(74)
  • QT实现视频播放器

    1.我们需要的头文件 2. .cpp文件 3.ui界面      

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包