在Unity3D播放视频

来源:互联网 发布:电视机看电影的软件 编辑:程序博客网 时间:2024/04/27 00:49
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class MovieTest : MonoBehaviour  
  5. {  
  6.     //电影纹理  
  7.     public MovieTexture movTexture;  
  8.     //声音  
  9.     public AudioSource movAudio;  
  10.   
  11.     void Start()  
  12.     {  
  13.         //设置当前对象的主纹理为电影纹理  
  14.         renderer.material.mainTexture = movTexture;  
  15.         //设置电影纹理播放模式为循环  
  16.         movTexture.loop = true;  
  17.         //StartCoroutine(DownLoadMovie());  
  18.     }  
  19.   
  20.     void OnGUI()  
  21.     {  
  22.         if (GUILayout.Button("播放/继续"))  
  23.         {  
  24.             //播放/继续播放视频  
  25.             if (!movTexture.isPlaying)  
  26.             {  
  27.                 movTexture.Play();  
  28.                 movAudio.Play();  
  29.             }  
  30.         }  
  31.   
  32.         if (GUILayout.Button("暂停播放"))  
  33.         {  
  34.             //暂停播放  
  35.             movTexture.Pause();  
  36.             movAudio.Pause();  
  37.         }  
  38.   
  39.         if (GUILayout.Button("停止播放"))  
  40.         {  
  41.             //停止播放  
  42.             movTexture.Stop();  
  43.             movAudio.Stop();  
  44.         }  
  45.     }  
  46.   
  47.     IEnumerator DownLoadMovie()  
  48.     {  
  49.         WWW www = new WWW("http://127.0.0.1/Head.ogv");  
  50.         yield return www;  
  51.         Debug.Log(Time.time);  
  52.         movTexture = www.movie;  
  53.         //设置当前对象的主纹理为电影纹理  
  54.         renderer.material.mainTexture = movTexture;  
  55.         movTexture.loop = true;  
  56.     }  
  57.   
  58. }  


注:1280*720分辨率的视频以此方法播放不会产生黑边。


以前只是测试,没有实际使用,发现多次点击播放后会有内存泄露。如下方法解决


[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class WebMovie : MonoBehaviour {  
  5.   
  6.     //电影纹理  
  7.     public MovieTexture movTexture;  
  8.     WWW www;  
  9.     void Start()  
  10.     {  
  11.           
  12.     }  
  13.   
  14.     void OnGUI()  
  15.     {  
  16.         if (GUILayout.Button("加载视频"))  
  17.         {  
  18.             StartCoroutine(DownLoadMovie());  
  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.         if (GUILayout.Button("卸载内存"))  
  42.         {  
  43.             renderer.material.mainTexture = null;  
  44.             movTexture = null;  
  45.             www = null;  
  46.             Resources.UnloadUnusedAssets();  
  47.         }  
  48.     }  
  49.   
  50.     IEnumerator DownLoadMovie()  
  51.     {  
  52.          www = new WWW("http://127.0.0.1/mumaren.ogv");  
  53.         yield return www;  
  54.         Debug.Log(Time.time);  
  55.         movTexture = www.movie;  
  56.         //设置当前对象的主纹理为电影纹理  
  57.         renderer.material.mainTexture = movTexture;  
  58.         movTexture.loop = true;  
  59.     }  
  60.   
  61. }  

就是销毁www对象,但是在这之前,要去掉别的对象对www的引用,比如材质球的主贴图、声明的movTexture,或许还有audioClip。
0 0
原创粉丝点击