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