Unity播放视频的几种方式

简介:许多游戏都是在开场CG播放后,进入主菜单的界面,例如炉石传说等。因此对unity播放视频的方式产生了兴趣,在查阅许多博客以及官方文档后,总结出以下几种方式,并以videoplayer方式制作一个简单的播放器

一、
首先是以MovieTexture方式播放视频,参考雨松MOMO的博客
这里原博客已经写的很详细了,这里不作过多阐述,仅以总结的方式描述

视频会以MovieTexture的方式导入unity
PC端
1.建立一个3d物体plane,修改plane的主纹理为导入的movietexture
2.通过UI直接绘制电影纹理movietexture

手机端
因为MovieTexture无法在手机上使用,因此在手机端上使用Handheld.PlayFullScreenMovie方式播放

备注:需要将视频放在Assets/StreamingAssets/路径下,、

二、
untiy在5.6版本推出了videoplayer控件,用以取代MovieTexture
导入的视频将默认以videoclip的格式保存,仍然保留MovieTexture格式的切换

以下是生成videoplayer控件的几种方式
1.新建一个空白的Video Player:选择菜单栏的GameObject->Video->Video Player或者在Hierarchy面板上选择Create->Video->Video Player或者右击Hierarchy面板空白处选择Video->Video Player。
2.直接将导入的VideoClip拖入场景或者Hierarchy面板,生成的VideoPlayer控件的VideoClip将会自动被赋值,如果场景中存在MainCamera,Camera也会被自动赋值为MainCamera,模式默认选择Camera Far Plane。
3.将导入的VideoClip拖动到场景中的Camera物体上,生成的VideoPlayer控件的VideoClip和MainCamera将会自动被赋值,模式默认选择Camera Far Plane。
4.将导入的VideoClip拖动到场景中的2D或者3D物体上,生成的VideoPlayer控件的VideoClip和Renderer将会自动被赋值,模式默认选择Material Override。
5.将导入的VideoClip拖动到场景中的UI物体上,生成的VideoPlayer控件的VideoClip将会自动被赋值,模式默认选择Render Texture。

视频来源

videoclip 导入的本地视频
URL 网络视频

以下是基本设置

Play On Awake 脚本载入时自动播放
Wait For First Frame 决定是否在第一帧加载完成后才播放,只有在Play On Awake被勾选是才有效
Loop 循环
Playback Speed 播放速度

Video Player视频渲染的方式

Camera Far Plane 基于摄像机的渲染,渲染在摄像机的远平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用于背景播放器
Camera Near Plane 基于摄像机的渲染,渲染在摄像机的近平面上,需要设置用于渲染的摄像机,同时可以修改alpha通道的值做透明效果,可用作前景播放器
render Texture 将视频画面保存在Render Texture上,以供物体或者RawImage使用,可以用来做基于UGUI的播放器
Material Override 将视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频和VR视频
API Only 未知

Video Player监听事件

errorReceived 错误监听到时被执行
frameDropped 有丢帧发生时被执行
frameReady 新的一帧准备好时被执行
loopPointReached 播放结束或播放到循环的点时被执行
prepareCompleted 视频准备完成时被执行
seekCompleted 查询帧操作完成时被执行
started 在Play方法调用之后立刻调用

视频的声音输出有两种方式

direct 直接和视频画面一起输出
Audio Source 添加一个Audio Source组件,以Audio Source的方式输出

看了许多博客,有关于声音输出的两个问题
1.direct方式没有声音输出
这个问题在我运行中并没有碰到,因此无法理解其原因,大多解决办法是通过Audio Source方式添加Audio Source组件播放声音,留待考究。

2.有声视频和无声视频切换会造成无声
留待考究

三、
下面通过Video Player方式制作一个简单的视频播放器

以Render Texture的方式将视频渲染到新建的movie材质上,再新建一个UI-RawImage,将movie材质赋给它,再创建几个UI-Botton用来实现开始、暂停、倍速、快进等功能

Unity播放视频的几种方式_第1张图片
新建一个空对象用来挂载脚本,再将脚本中的函数与UI的事件进行绑定

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

public class MyVideo : MonoBehaviour
{
    public VideoPlayer vPlayer;
    public GameObject rawImage;
    private double totaltime;         //视频总时长
    private float skiptime = 10;   //快进or快退的时间

    void Start()
    {
        vPlayer.loopPointReached += EndReached;
        totaltime = vPlayer.length;
    }

    //当视频播放完毕时关闭视频
    void EndReached(VideoPlayer vPlayer)
    {
        rawImage.SetActive(false);
    }

    //关闭视频
    public void close()
    {
        vPlayer.Stop();
        rawImage.SetActive(false);
    }

    //播放or暂停
    public void startandpause()
    {
        if(vPlayer.isPaused==true)
        {
            vPlayer.Play();
        }
        else if (vPlayer.isPlaying == true)
        {
            vPlayer.Pause();
        }
    }

    //倍速播放
    public void playspeed(int value)
    {
        float speed=1;
        switch (value)
        {
            case 0:
                speed =1;
                break;
            case 1:
                speed =0.5f;
                break;
            case 2:
                speed =1.5f;
                break;
            case 3:
                speed =2.0f;
                break;
        }
        vPlayer.playbackSpeed = speed;
    }

    //快进
    public void next()
    {
        vPlayer.time += skiptime;
    }

    //快退
    public void last()
    {
        vPlayer.time -= skiptime;
    }
}

参考:https://blog.csdn.net/qq_24896943/article/details/76268980
github地址:https://github.com/Stardust-Alter/unity-video-player

你可能感兴趣的:(Unity)