• 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();
            }
        }
    

      

  • 相关阅读:
    再谈:我对测试行业发展和自我价值诉求的思考
    如何写出让业务满意的性能测试报告
    面试突击17:HashMap除了死循环还有什么问题?
    Spring Boot Admin,贼好使!
    为什么HashMap会产生死循环?
    更快的Maven构建工具mvnd和Gradle哪个更快?
    交互软件Flinto Principle
    如何避免 加和浮点数的问题
    Oracle Linux 8.5 For windows
    三门问题
  • 原文地址:https://www.cnblogs.com/hewencong/p/4321191.html
Copyright © 2020-2023  润新知