Unity插件分享——AVPro Video(七)

189 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

概述

本篇文章主要分享一个作者平时在开发过程中使用过的感觉还比较好的插件,希望对各位日后开发过程中能够有所帮助。本篇文章主要分享的插件是AVPro Video 。一款非常好用的视频播放插件。在Unity中除了自带的VideoPlayer,在一个比较好用,的就是AVPro Video插件。

使用

上一篇我文章我们主要介绍了视频播放时间,本篇文章我们一起来看一下在示例工程中没有的全屏。窗口化播放视频功能。

0627-1.gif 我们本篇文章是在案例场景Demo_MediaPlayer上进行改造的。我们通过观察可以看到示例场景中的UI已经做好了自适应,所以我们如果想要控制视频窗口的大小,只需要在所有的UI外城添加一个父类,然后控制父类UI的大小即可。首先创建一个空物体VideoPage,然后将所有的视频UI放到父类UI下方。如下所示要将Anchors设置成全屏化,参数位置根据自己的需求进行设置

image.png

接下来就是UI搭建,在官方案例场景中添加一个全屏按钮,这里我直接用全屏和窗口两个图片代替了,这里的场景自带排版,所以只管添加就行,排班会自动进行

image.png 整个UI基本就是只需要进行这么一点的改动,接下来就是进行代码操作。首先定义几个我们需要用到的变量:要控制的视频页,全屏/窗口化按钮,全屏/窗口化按钮图片,当前窗口状态

/// <summary>
/// 视频页
/// </summary>
[SerializeField] RectTransform _videoPage = null;
/// <summary>
/// 全屏/窗口化按钮
/// </summary>
[SerializeField] Button _fullScene = null;
/// <summary>
/// 全屏化按钮图片
/// </summary>
[SerializeField] Sprite _fullSceneSprite;
/// <summary>
/// 窗口化按钮图片
/// </summary>
[SerializeField] Sprite _WinSceneSprite;
/// <summary>
/// 当前是否是全屏化
/// </summary>
[SerializeField] bool _isFull = false;

接下来就是进行按钮的点击事件添加,以及对视频窗口进行初始化操作

void Start()
{
    //按钮添加点击事件
    _fullScene.onClick.AddListener(SetFullScene);
   //初始化设置视频为窗口化播放
    _isFull = true;
    SetFullScene();
}

最后就是设置视频页参数,主要逻辑就是,判断当前页的状态,如果是全屏就将数据设置为窗口化数据,反之设置成全屏数据。这里设置RectTransform的方法可以自行查看官方API或者通过网络寻找教程,属于基础操作,就不在过多介绍了。
主要代码逻辑吗,第一步设置anchor为全屏模式

//设置anchor为全屏模式
_videoPage.anchorMin = new Vector2(0, 0);
_videoPage.anchorMax = new Vector2(1, 1);

第二步:判断状态设置位置,以窗口化为例

//设置成窗口化
_videoPage.offsetMin = new Vector2(500, 90);
_videoPage.offsetMax = new Vector2(-70, -200);

上述两个代码对应的UI效果

image.png 第三步,设置按钮图片

//设置按钮图片
_fullScene.GetComponent<Image>().sprite = _fullSceneSprite;

最后一步,设置视频页状态

//设置窗口当前的状态
_isFull = !_isFull;

完整代码如下;

private void SetFullScene()
{
    //设置anchor为全屏模式
    _videoPage.anchorMin = new Vector2(0, 0);
    _videoPage.anchorMax = new Vector2(1, 1);
    //判断当前视频窗口状态
    if (_isFull)
    {
        //设置成窗口化
        _videoPage.offsetMin = new Vector2(500, 90);
        _videoPage.offsetMax = new Vector2(-70, -200);
        //设置按钮图片
        _fullScene.GetComponent<Image>().sprite = _fullSceneSprite;
    }
    else
    {
        //设置层全屏
        _videoPage.offsetMin = new Vector2(0, 0);
        _videoPage.offsetMax = new Vector2(0, 0);
        //设置按钮图片
        _fullScene.GetComponent<Image>().sprite = _WinSceneSprite;
    }
    //设置窗口当前的状态
    _isFull = !_isFull;
}

结束

到此,全屏/窗口化的功能就做好了,其实搞懂其中的原理一切就简单多了,本篇文章就介绍到这里,希望对各位能够所帮助。