您的位置:首页 > 移动开发 > Unity3D

Unity3D播放视频

2016-06-28 22:04 309 查看
点击这里下载视频转换器,该转换器会把其他格式转化为ogv格式,直接被unity识别,不需要安装quicktime不需要重启,更为重要的是比把mov导入unity的要清晰。













[csharp] view
plain copy

 





using UnityEngine;  

using System.Collections;  

  

public class MovieTest : MonoBehaviour  

{  

    //电影纹理  

    public MovieTexture movTexture;  

  

    void Start()  

    {  

        //设置当前对象的主纹理为电影纹理  

        renderer.material.mainTexture = movTexture;  

        //设置电影纹理播放模式为循环  

        movTexture.loop = true;  

        //StartCoroutine(DownLoadMovie());  

    }  

  

    void OnGUI()  

    {  

        if (GUILayout.Button("播放/继续"))  

        {  

            //播放/继续播放视频  

            if (!movTexture.isPlaying)  

            {  

                movTexture.Play();  

            }  

        }  

  

        if (GUILayout.Button("暂停播放"))  

        {  

            //暂停播放  

            movTexture.Pause();  

        }  

  

        if (GUILayout.Button("停止播放"))  

        {  

            //停止播放  

            movTexture.Stop();  

        }  

    }  

  

    IEnumerator DownLoadMovie()  

    {  

        WWW www = new WWW("http://127.0.0.1/Head.ogv");  

        yield return www;  

        Debug.Log(Time.time);  

        movTexture = www.movie;  

        //设置当前对象的主纹理为电影纹理  

        renderer.material.mainTexture = movTexture;  

        movTexture.loop = true;  

    }  

  

}  

加声音

[csharp] view
plain copy

 





using UnityEngine;  

using System.Collections;  

  

public class MovieTest : MonoBehaviour  

{  

    //电影纹理  

    public MovieTexture movTexture;  

    //声音  

    public AudioSource movAudio;  

  

    void Start()  

    {  

        //设置当前对象的主纹理为电影纹理  

        renderer.material.mainTexture = movTexture;  

        //设置电影纹理播放模式为循环  

        movTexture.loop = true;  

        //StartCoroutine(DownLoadMovie());  

    }  

  

    void OnGUI()  

    {  

        if (GUILayout.Button("播放/继续"))  

        {  

            //播放/继续播放视频  

            if (!movTexture.isPlaying)  

            {  

                movTexture.Play();  

                movAudio.Play();  

            }  

        }  

  

        if (GUILayout.Button("暂停播放"))  

        {  

            //暂停播放  

            movTexture.Pause();  

            movAudio.Pause();  

        }  

  

        if (GUILayout.Button("停止播放"))  

        {  

            //停止播放  

            movTexture.Stop();  

            movAudio.Stop();  

        }  

    }  

  

    IEnumerator DownLoadMovie()  

    {  

        WWW www = new WWW("http://127.0.0.1/Head.ogv");  

        yield return www;  

        Debug.Log(Time.time);  

        movTexture = www.movie;  

        //设置当前对象的主纹理为电影纹理  

        renderer.material.mainTexture = movTexture;  

        movTexture.loop = true;  

    }  

  

}  



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

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

[csharp] view
plain copy

 





using UnityEngine;  

using System.Collections;  

  

public class WebMovie : MonoBehaviour {  

  

    //电影纹理  

    public MovieTexture movTexture;  

    WWW www;  

    void Start()  

    {  

          

    }  

  

    void OnGUI()  

    {  

        if (GUILayout.Button("加载视频"))  

        {  

            StartCoroutine(DownLoadMovie());  

        }  

        if (GUILayout.Button("播放/继续"))  

        {  

            //播放/继续播放视频  

            if (!movTexture.isPlaying)  

            {  

                movTexture.Play();  

            }  

        }  

  

        if (GUILayout.Button("暂停播放"))  

        {  

            //暂停播放  

            movTexture.Pause();  

        }  

  

        if (GUILayout.Button("停止播放"))  

        {  

            //停止播放  

            movTexture.Stop();  

        }  

  

        if (GUILayout.Button("卸载内存"))  

        {  

            renderer.material.mainTexture = null;  

            movTexture = null;  

            www = null;  

            Resources.UnloadUnusedAssets();  

        }  

    }  

  

    IEnumerator DownLoadMovie()  

    {  

         www = new WWW("http://127.0.0.1/mumaren.ogv");  

        yield return www;  

        Debug.Log(Time.time);  

        movTexture = www.movie;  

        //设置当前对象的主纹理为电影纹理  

        renderer.material.mainTexture = movTexture;  

        movTexture.loop = true;  

    }  

  

}  

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




2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: