一.实验目的:
了解视频资源在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();
}
}