Unity3D播放视频

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

Unity3D播放视频_第1张图片


Unity3D播放视频_第2张图片


Unity3D播放视频_第3张图片


Unity3D播放视频_第4张图片


Unity3D播放视频_第5张图片


Unity3D播放视频_第6张图片


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;
    }

}

加声音

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;
    }

}

Unity3D播放视频_第7张图片

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


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


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。

你可能感兴趣的:(Unity)