Unity3D:movietexture www文件的最大大小?

时间:2014-01-11 19:33:17

标签: c# unity3d movie ogg

我对Unity3D的movieTexture对象有疑问。

在我目前的游戏中,我有一个玩家坐在其中的3D房间,并且在他/她面前有一个电脑屏幕。我在这个屏幕上有一个电影纹理,可以自动播放电影。

此影片是应用程序的#### _数据文件夹的链接。它寻找任何名为“movie.ogv”的东西

我使用了4分钟长的视频。它可以完美

所以,然后我将流行电视节目的一集转换为OGG Theora,“ogv”,并将它放在同一个名字下面。现在,当游戏加载时,一切都立即变黑。我必须打开任务管理器才能看到我的游戏被冻结。

Unity是否必须...以某种方式处理这些较大的文件,需要在黑屏上冻结一段时间?或者它不喜欢长视频?

目的是允许用户投入他们想要的任何电影文件并在游戏中观看。如果Unity只有22分钟左右,大约150MB的内容被放入内部,那么这个目的就会被打败。请帮忙?有什么想法吗?

using UnityEngine;

using System.Collections;



[RequireComponent(typeof(AudioSource))]

public class VideoScript : MonoBehaviour 

{   

    MovieTexture movieTexture;

    private bool isPaused;


    void Start ()   {


        isPaused = false;

        //WWW www = new WWW ("http://www.unity3d.com/webplayers/Movie/sample.ogg");   
        WWW www = new WWW ("file:///"+(Application.dataPath)+"/movie.ogv");   


        movieTexture = (MovieTexture) www.movie; 

        renderer.material.mainTexture = movieTexture;

        audio.clip = movieTexture.audioClip;



    }



    void Update ()  {

        if (movieTexture.isReadyToPlay && !movieTexture.isPlaying && !isPaused)
        { 

            movieTexture.Play(); 
            audio.Play();

        }



        if (Input.GetKeyDown ("space")) 
        {
            if (movieTexture.isPlaying) 
            {
                movieTexture.Pause();
                isPaused=true;
            }

            else 

            {
                movieTexture.Play();
                isPaused=false;
            }
        }


    }   

}

1 个答案:

答案 0 :(得分:2)

修改

您在启动脚本中缺少一个关键行。

// Wait for download to complete
yield www;

Unity需要一段时间才能加载更大文件的内容,因此你的脚本会获得一个空的电影纹理。

以下是完整的Start脚本:

    void Start ()   
    {    

       isPaused = false;

       // This variable is defined outside of the Start function.         
       www = new WWW ("file:///"+(Application.dataPath)+"/movie.ogv");   

       // Wait for download to complete
       yield www;

       movieTexture = (MovieTexture) www.movie; 
       renderer.material.mainTexture = movieTexture;
       audio.clip = movieTexture.audioClip;

    }

查看here,详细了解其工作原理。简而言之,yield指示脚本在该行等待,直到www对象准备就绪。

原始回答

仅将适当格式的文件放在文件夹中是不够的。电影是一种资源,因此它需要像所有其他资源一样对待。

您需要使用Resources.Load(....)加载广告,然后将结果MovieTexture分配给相关对象。

如果您分享一些关于这些电影的加载程序的信息,将会有所帮助。