本文在完成基于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组件中
下图是运行效果图(人是视频里抠出来的):
这个脚本也十分粗糙,还有许多我项目的需求没有转化成代码写在里面。期待之后的改善。以上。