Unity视频播放的脚本控制

       本文在完成基于VideoPlayer组件的视频播放基础上再加上脚本控制,实现对视频播放的切换、暂停及继续播放功能。

       视频播放的准备工作可参考我的博文:https://blog.csdn.net/cs874300/article/details/89294433

       脚本控制参考的博文:https://jingyan.baidu.com/article/22fe7cedffc0cc3002617f9b.html  感谢原作者大大的文章!(顺便小小地吐槽下为什么会发在百度经验,也去找过有没有更早的出处,结果是没有emmm)

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

public class VideoController : MonoBehaviour
{

    //设置VideoPlayer、RawImage和当前播放视频索引参数

    private VideoPlayer videoPlayer;

    private RawImage rawImage;


    private int currentClipIndex;

    //设置相关文本和按钮参数以及视频列表

    public Text text_PlayOrPause;

    public Button button_PlayOrPause;

    public Button button_Pre;

    public Button button_Next;

    public VideoClip[] videoClips;



    // Use this for initialization

    void Start()
    {

        //获取VideoPlayer和RawImage组件,以及初始化当前视频索引

        videoPlayer = this.GetComponent<VideoPlayer>();

        rawImage = this.GetComponent<RawImage>();

        currentClipIndex = 0;

        //设置相关按钮监听事件

        button_PlayOrPause.onClick.AddListener(OnPlayOrPauseVideo);
        button_Pre.onClick.AddListener(OnPreVideo);
        button_Next.onClick.AddListener(OnNextVideo);

        //为了刚开始不自动播放
        videoPlayer.Pause();

    }

    // Update is called once per frame

    void Update()
    {

        //没有视频则返回,不播放

        if (videoPlayer.texture == null)
        {

            return;

        }


        //渲染视频到UGUI上

        //rawImage.texture = videoPlayer.texture;

    }



    /// <summary>

    /// 播放和暂停当前视频

    /// </summary>

    private void OnPlayOrPauseVideo()
    {

        //判断视频播放情况,播放则暂停,暂停就播放,并更新相关文本

        if (videoPlayer.isPlaying == true)
        {

            videoPlayer.Pause();

            text_PlayOrPause.text = "播放";

        }

        else
        {

            videoPlayer.Play();

            text_PlayOrPause.text = "暂停";

        }

    }

    /// <summary>

    /// 切换上一个视频

    /// </summary>

    private void OnPreVideo()
    {

        //视频列表减一播放上一个视频,并进行避免越界操作

        currentClipIndex -= 1;

        if (currentClipIndex < 0)
        {

            currentClipIndex = videoClips.Length - 1;

        }

        videoPlayer.clip = videoClips[currentClipIndex];

        text_PlayOrPause.text = "暂停";

    }

    /// <summary>

    /// 切换下一个视频

    /// </summary>

    private void OnNextVideo()
    {

        //视频列表加一播放下一个视频,并进行避免越界操作

        currentClipIndex += 1;

        currentClipIndex = currentClipIndex % videoClips.Length;

        videoPlayer.clip = videoClips[currentClipIndex];

        text_PlayOrPause.text = "暂停";

    }
}

        原文中Update中有rawImage.texture = videoPlayer.texture; 而在我的RawImage组件中已经通过RenderTexture将两者关联在一起了,所以我发现我注释掉之后该脚本依然能够正常运行。

       除了需要在场景的UI中添加Button,用于实现对视频上一个下一个的控制。包括Next,Forward,Pause(Play),另外别忘了在Canvas外面添加EventSystem(有了它按钮才能使用)。如下图(灰色部分是被我禁用的,不必在意)

       

      下图是我的控制脚本在RawImage组件中

       

       下图是运行效果图(人是视频里抠出来的):

        

        这个脚本也十分粗糙,还有许多我项目的需求没有转化成代码写在里面。期待之后的改善。以上。

       

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值