摘要: Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象。
1.Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上。第二种是在GUI层面上播放视频。播放视频其实和贴图非常相像,因为播放视频用到的MovieTexture属于贴图Texture的子类
//电影纹理 public MovieTexture movTexture; void Start() { transform.localScale = new Vector3(1, 1, 1); //设置当前对象的主纹理为电影纹理 renderer.material.mainTexture = movTexture; //设置电影纹理播放模式为循环 movTexture.loop = true; } void OnGUI() { if (GUILayout.Button("播放/继续")) { //播放/继续播放视频 if (!movTexture.isPlaying) { movTexture.Play(); } } if (GUILayout.Button("暂停播放")) { //暂停播放 movTexture.Pause(); } if (GUILayout.Button("停止播放")) { //停止播放 movTexture.Stop(); } }
第二种播放视频的方式基于GUI。大家可以把刚刚创建的Plane对象以及世界定向光删除,直接将脚本绑定在摄像机对象中即可。脚本控制基本上与挂在Plane上面一致。
2.unity播放外部视频,可以用WWW类来加载视频,里面涉及到协程的知识。
协程相当于线程,这里有一篇文章深入讲解协程。http://dsqiu.iteye.com/blog/2029701
协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。
这里还有一篇文章讲到了协程 http://blog.csdn.net/huang9012/article/details/38492937
//电影纹理 public MovieTexture movTexture; void Start() { //设置电影纹理播放模式为循环 //movTexture.loop = true; StartCoroutine(LoadMovie()); Debug.Log("download complete"); } IEnumerator LoadMovie() { //配置文件路径 //string configPath = "file:///" + Application.dataPath + "/Config/config.txt"; string configPath = "E:/config.txt"; //视频文件路径 //string url = "file:///" + Application.dataPath + "/Movies/oldboy.ogv"; //string url = "file:///" + "E:/U3dExercise/oldboy.ogv"; string url = ""; using (StreamReader reader = new StreamReader(configPath)) { url = reader.ReadToEnd().Trim(); } //WWW是一个Unity开发中非常常用到的工具类,主要提供一般Http访问的功能,以及动态从网上下载图片、声音、视频Unity资源等。 //WWW里面参数必须要加上"file:///"作为前缀 file:///是协议头,能解析为本地文件路径 //常用的有http://,ftp://,和file:/// WWW www = new WWW("file:///" + url); movTexture = www.movie; while (!movTexture.isReadyToPlay) { Debug.Log(www.progress); } yield return www; } void OnGUI() { //绘制电影纹理 GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill); if (GUILayout.Button("播放/继续")) { //播放/继续播放视频 if (!movTexture.isPlaying) { movTexture.Play(); } } if (GUILayout.Button("暂停播放")) { //暂停播放 movTexture.Pause(); } if (GUILayout.Button("停止播放")) { //停止播放 movTexture.Stop(); } }