unity 播放外部视频

摘要: Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象。

1.Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上。第二种是在GUI层面上播放视频。播放视频其实和贴图非常相像,因为播放视频用到的MovieTexture属于贴图Texture的子类

//电影纹理
    public MovieTexture movTexture;

    void Start()
    {
        transform.localScale = new Vector3(1, 1, 1);
        //设置当前对象的主纹理为电影纹理
        renderer.material.mainTexture = movTexture;
        //设置电影纹理播放模式为循环
        movTexture.loop = true;
    }

    void OnGUI()
    {
        if (GUILayout.Button("播放/继续"))
        {
            //播放/继续播放视频
            if (!movTexture.isPlaying)
            {
                movTexture.Play();
            }
        }
        if (GUILayout.Button("暂停播放"))
        {
            //暂停播放
            movTexture.Pause();
        }
        if (GUILayout.Button("停止播放"))
        {
            //停止播放
            movTexture.Stop();
        }
    }

  

第二种播放视频的方式基于GUI。大家可以把刚刚创建的Plane对象以及世界定向光删除,直接将脚本绑定在摄像机对象中即可。脚本控制基本上与挂在Plane上面一致。

2.unity播放外部视频,可以用WWW类来加载视频,里面涉及到协程的知识。

协程相当于线程,这里有一篇文章深入讲解协程。http://dsqiu.iteye.com/blog/2029701

协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。

这里还有一篇文章讲到了协程 http://blog.csdn.net/huang9012/article/details/38492937

//电影纹理
    public MovieTexture movTexture;

    void Start()
    {
        //设置电影纹理播放模式为循环
        //movTexture.loop = true;
        StartCoroutine(LoadMovie());
        Debug.Log("download complete");
        
    }

    IEnumerator LoadMovie()
    {
        //配置文件路径
        //string configPath = "file:///" + Application.dataPath + "/Config/config.txt";
        string configPath = "E:/config.txt";
        //视频文件路径
        //string url = "file:///" + Application.dataPath + "/Movies/oldboy.ogv";
        //string url = "file:///" + "E:/U3dExercise/oldboy.ogv";
        string url = "";
        using (StreamReader reader = new StreamReader(configPath))
        {
            url = reader.ReadToEnd().Trim();
        }

        //WWW是一个Unity开发中非常常用到的工具类,主要提供一般Http访问的功能,以及动态从网上下载图片、声音、视频Unity资源等。
        //WWW里面参数必须要加上"file:///"作为前缀  file:///是协议头,能解析为本地文件路径
        //常用的有http://,ftp://,和file:///
        WWW www = new WWW("file:///" + url);
        movTexture = www.movie;
        while (!movTexture.isReadyToPlay)
        {
            Debug.Log(www.progress);
        }
        yield return www;
    }
    void OnGUI()
    {
        //绘制电影纹理
        GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill);
        if (GUILayout.Button("播放/继续"))
        {
            //播放/继续播放视频
            if (!movTexture.isPlaying)
            {
                movTexture.Play();
            }
        }
        if (GUILayout.Button("暂停播放"))
        {
            //暂停播放
            movTexture.Pause();
        }
        if (GUILayout.Button("停止播放"))
        {
            //停止播放
            movTexture.Stop();
        }
    }

  

原文地址:https://www.cnblogs.com/hewencong/p/4321191.html