摘要: 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(); } }