Unity3D动态加载外部MovieTexture视频

时间:2023-03-08 23:14:03
Unity3D动态加载外部MovieTexture视频

网上大家也写了很多Unity3D中播放视频的教程,关于播放外部视频的还是比较少,所以写这篇文章,不足之处,还望读者指正。

在Unity3D中,我们一般使用播放视频的方法:将*.mov,*.mp4等格式拖拽到Asset中目录,Unity3D会转换为MovieTexture,音频AudioClip在子节点可找到。但,如果我们想动态加载外部视频,该怎么做呢?以下附上实现脚本,可自行修改。

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.IO;
  4. //[RequireComponent(typeof(AudioSource))]
  5. public class MoviePlayer : MonoBehaviour
  6. {
  7. private  MovieTexturemovieTexture;//
  8. private string movieDir = "/Data/Movie";//根目录下
  9. private float movietime;
  10. privatestatic MoviePlayer instance;
  11. public static MoviePlayer Instance
  12. {
  13. get
  14. {
  15. return instance;
  16. }
  17. }
  18. void Start()
  19. {
  20. StartCoroutine(DownloadMovie());
  21. Play();
  22. instance = this;
  23. }
  24. public void Play()
  25. {
  26. audio.Play();
  27. movieTexture.Play();
  28. Debug.Log("Play");
  29. }
  30. public void Pause()
  31. {
  32. audio.Pause();
  33. movieTexture.Pause();
  34. Debug.Log("Pause");
  35. }
  36. public void Stop()
  37. {
  38. audio.Stop();
  39. movieTexture.Stop();
  40. Debug.Log("Stop");
  41. }
  42. public bool IsPlaying()
  43. {
  44. return audio.isPlaying;
  45. }
  46. public float GetMovieTime()
  47. {
  48. return audio.time;
  49. }
  50. IEnumerator DownloadMovie()
  51. {//WWW www = new WWW("file:///D://Project//Movie/Data/Movie//movie.ogv");
  52. string[] files = Directory.GetFiles(Directory.GetCurrentDirectory() +movieDir);//PC版,其他版本只需要修改视频文件读取方式
  53. WWW www = new WWW("file:///" + files[0]);
  54. movieTexture = (MovieTexture)www.movie;
  55. while(!movieTexture.isReadyToPlay)
  56. yield return www;
  57. renderer.material.mainTexture = movieTexture;//视频纹理
  58. audio.clip = movieTexture.audioClip;//音频
  59. Play();
  60. }
  61. }
Unity3D动态加载外部MovieTexture视频