網上大家也寫了很多Unity3D中播放視頻的教程,關於播放外部視頻的還是比較少,所以寫這篇文章,不足之處,還望讀者指正。
在Unity3D中,我們一般使用播放視頻的方法:將*.mov,*.mp4等格式拖拽到Asset中目錄,Unity3D會轉換為MovieTexture,音頻AudioClip在子節點可找到。但,如果我們想動態加載外部視頻,該怎么做呢?以下附上實現腳本,可自行修改。
- using UnityEngine;
- using System.Collections;
- using System.IO;
- //[RequireComponent(typeof(AudioSource))]
- public class MoviePlayer : MonoBehaviour
- {
- private MovieTexturemovieTexture;//
- private string movieDir = "/Data/Movie";//根目錄下
- private float movietime;
- privatestatic MoviePlayer instance;
- public static MoviePlayer Instance
- {
- get
- {
- return instance;
- }
- }
- void Start()
- {
- StartCoroutine(DownloadMovie());
- Play();
- instance = this;
- }
- public void Play()
- {
- audio.Play();
- movieTexture.Play();
- Debug.Log("Play");
- }
- public void Pause()
- {
- audio.Pause();
- movieTexture.Pause();
- Debug.Log("Pause");
- }
- public void Stop()
- {
- audio.Stop();
- movieTexture.Stop();
- Debug.Log("Stop");
- }
- public bool IsPlaying()
- {
- return audio.isPlaying;
- }
- public float GetMovieTime()
- {
- return audio.time;
- }
- IEnumerator DownloadMovie()
- {//WWW www = new WWW("file:///D://Project//Movie/Data/Movie//movie.ogv");
- string[] files = Directory.GetFiles(Directory.GetCurrentDirectory() +movieDir);//PC版,其他版本只需要修改視頻文件讀取方式
- WWW www = new WWW("file:///" + files[0]);
- movieTexture = (MovieTexture)www.movie;
- while(!movieTexture.isReadyToPlay)
- yield return www;
- renderer.material.mainTexture = movieTexture;//視頻紋理
- audio.clip = movieTexture.audioClip;//音頻
- Play();
- }
- }