Unity3D兩種方式實現游戲視頻播放


准備工作

  由於Unity中能夠識別的視頻格式主要有:.mov, .mpg, .mpeg, .mp4, .avi, .asf,但是其實最后這些格式的時候在導入到Unity中的時候,都會再進行一次Unity內部的視頻轉碼,這是一個耗時的操作,而且要保證視頻轉碼的順利完成,我們還必須安裝Quicktime player工具,用於視頻的轉碼。

  按照要求,我安裝了Quicktime player之后,將視頻war_video.mp4通過拖拽導入到Unity中,結果提示:“Movie importing requires Quicktime to be installed...”這樣的錯誤,這是因為Unity對於Quicktime player的依賴還沒有生效。通過查詢我們可以知道,導入Unity的視頻最后都被轉碼為.ogv格式,這是Unity能夠直接識別的格式。

      在解決問題的時候,我找到了一個視頻格式轉碼工具,能夠將其他格式的視頻轉碼為Unity能夠直接識別的.ogv格式,而且不依賴於Quicktime player,而且導出來視頻的質量會比Quicktime轉碼的更加高,這個工具就是:TheoraConverter。

  

 

  視頻轉碼成功后,得到一個與原視頻文件同名但后綴不同的視頻文件:***.ogv,將其導入到Unity中即可。由於不需要再進行轉碼,所以資源載入的速度很快,可以在Inspector中預覽播放視頻。

正文准備工作

  Unity3D中播放游戲視頻的方式有兩種:第一種是在游戲對象中播放,例如,在游戲世界中創建一個Plane面對象,攝像機直直的照射在這個面上。第二種是在GUI層面上播放視頻,這種方式下只能在“Game”視圖中看到播放的視頻,如果此時使用htc vive,在眼鏡中無法看到視頻。

  播放視頻其實和貼圖非常相像,因為播放視頻用到的MovieTexture屬於貼圖Texture的子類,現在我們開始學習一下Unity中播放視頻的這兩種方式。

  Unity支持的播放視頻格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。通過前面說的方法,將視頻文件轉換成.ogv格式,然后把對應的視頻文件拖拽入Project視圖即可,它會自動生成對應的MovieTexture對象。如果視頻中含有音頻的話會對應生成audio文件。接着在Hierarchy視圖中創建一個Plane對象視頻將在它之上播放,Directional light世界定向光用於照亮整個游戲場景,最后Main Camera對象將直直的照射在Plane對象。

  編寫test腳本

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class TestUseless : MonoBehaviour
 5 {
 6     //電影紋理
 7     public MovieTexture movTexture;
 8 
 9     void Start()
10     {
11         //設置當前對象的主紋理為電影紋理
12         this.transform.GetComponent<Renderer>().material.mainTexture = movTexture;
13         //設置電影紋理播放模式為循環
14         movTexture.loop = true;
15     }
16     void Update()
17     {
18 
19     }
20 
21     void OnGUI()
22     {
23         if (GUILayout.Button("播放/繼續"))
24         {
25             //播放/繼續播放視頻
26             if (!movTexture.isPlaying)
27             {
28                 movTexture.Play();
29             }
30 
31         }
32 
33         if (GUILayout.Button("暫停播放"))
34         {
35             //暫停播放
36             movTexture.Pause();
37         }
38 
39         if (GUILayout.Button("停止播放"))
40         {
41             //停止播放
42             movTexture.Stop();
43         }
44     }
45 }
  使用對象拖拽的形式為Mov Texture對象賦值,那么在腳本中就能直接使用它了。
 

  

  第二種播放視頻的方式基於GUI。我們把剛剛創建的Plane對象以及世界定向光刪除,直接將腳本綁定在攝像機對象中即可,接着我們簡單的修改一下剛剛的游戲腳本。

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class TestUseless : MonoBehaviour
 5 {
 6     //電影紋理
 7     public MovieTexture movTexture;
 8 
 9     void Start()
10     {
11         //設置電影紋理播放模式為循環
12         movTexture.loop = true;
13     }
14 
15     void OnGUI()
16     {
17         //  基於GUI播放視頻
18         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill);
19 
20         if (GUILayout.Button("播放/繼續"))
21         {
22             //播放/繼續播放視頻
23             if (!movTexture.isPlaying)
24             {
25                 movTexture.Play();
26             }
27         }
28 
29         if (GUILayout.Button("暫停播放"))
30         {
31             //暫停播放
32             movTexture.Pause();
33         }
34 
35         if (GUILayout.Button("停止播放"))
36         {
37             //停止播放
38             movTexture.Stop();
39         }
40     }
41 }

  在GUI中播放視頻的原理是直接通過GUI調用DrawTexture方法,這里和繪制貼圖很像。目前播放視頻的大小是屏幕的寬高,如果想動態的修改視頻的寬或高直接修改new Rect() 視頻顯示區域即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM