美文网首页
Unity中 视频的采集与播放 BMS

Unity中 视频的采集与播放 BMS

作者: LunarShade | 来源:发表于2017-09-19 16:48 被阅读0次

    一.实验目的:

    了解视频资源在Unity中的使用方式以及在Unity中实时显示视频的方法

    二.实验内容:

    (1) 查询有关资料,了解Unity中视频资源的使用情况,实时视频的采集与显示方法

    (2) 设计一个由捕获、播放、暂停、停止按钮构成的视频播放GUI界面

    (3) 点击捕获时能在游戏场景中显示计算机摄像头捕获的视频内内容

    (4) 点击其它三个按钮时能播放制定的视频文件

    作业提交:(1) DOC 格式的实验报告

    (2) 详细说明实现视频播放功能的过程

    (3) 详细说明实现视频捕获功能的过程

    (4) 报告中附加相应的控制代码

    三.实验步骤:

    Unity播放视频有两种方法:通过GUI进行播放,或者通过摄像机扫描平面直观地进行播放。

    UNITY设计非常人性化,如果将视频素材拖动到scene窗口中可以直接创建出Movie Texture对象,并且支持的文件格包括: .mov,.mpg,.mpeg,.mp4,.avi和.asf。经过测试,.MP4文件并不能在5.5版本中转化为movie texture,并且所有视频格式均需要quicktime转码的支持(查阅资料发现.ogv格式可以直接读取,但是格式工厂并不提供该格式的转换,因此考虑使用avi格式并下载quicktime进行自动转码。)

    例如通过摄像机扫描平面的方法直接播放,只需在GUI的canvas界面拖动视频文件并正对摄像机/UI窗口的中间即可。

    首先对Main Camera进行属性调节:将透视摄像机变为非透视摄像机,以防止画面变形;

    之后在摄像机正面新建一个plane,并设置Plane的长宽为1920x1080像素(对原1x1x1的plane则调节为XScale=1.920,YScale=1.080。之后对该平面的旋转角度进行调整,防止视频出现翻转情况:

    调节后对该平面添加播放脚本,播放代码如下:

    usingSystem.Collections;

    usingSystem.Collections.Generic;

    usingUnityEngine;

    publicclassMovieCaster:MonoBehaviour{

    publicMovieTextureMovieTexture;

    privateMeshRendererMoviePlayer;

    voidStart()

    {

    MoviePlayer = GetComponent();

    MoviePlayer.material.mainTexture = MovieTexture;

    MovieTexture.loop =true;

    }

    voidOnGUI()

    {

    if(GUILayout.Button("Play"))

    {

    if(!MovieTexture.isPlaying)

    {

    MovieTexture.Play();

    }

    }

    if(GUILayout.Button("Pause"))

    {

    MovieTexture.Pause();

    }

    if(GUILayout.Button("Stop"))

    {

    MovieTexture.Stop();

    }

    }

    }

    完成后将事先导入的mov格式饰品拖动到movieTexture变量中,点击播放就可以播放了。

    播放界面如下:

    如果要实现对摄像头的使用,同样可以对一个plane添加类似脚本完成,实验步骤与上面类似,首先创建一个新场景,然后对主摄像机正面添加一个plane,并对plane的XYZ完成旋转以使得摄像头捕捉到的画面正确显示。之后为该平面添加一段脚本,脚本代码如下:

    usingSystem.Collections;

    usingSystem.Collections.Generic;

    usingUnityEngine;

    publicclassWebCamControl:MonoBehaviour{

    voidStart()

    {

    WebCamTexturewebcamTexture =newWebCamTexture();

    for(inti = 0; i

    {

    if(!WebCamTexture.devices[i].isFrontFacing)

    {

    webcamTexture.deviceName =WebCamTexture.devices[i].name;

    break;

    }

    }

    Rendererrenderer = GetComponent();

    renderer.material.mainTexture = webcamTexture;

    webcamTexture.Play();

    }

    }

    相关文章

      网友评论

          本文标题:Unity中 视频的采集与播放 BMS

          本文链接:https://www.haomeiwen.com/subject/fgfgsxtx.html