Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity3D中的MovieTexture从未准备好播放_C#_Unity3d_Movie_Coroutine - Fatal编程技术网

C# Unity3D中的MovieTexture从未准备好播放

C# Unity3D中的MovieTexture从未准备好播放,c#,unity3d,movie,coroutine,C#,Unity3d,Movie,Coroutine,我正在使用Unity WWW对象加载ogg theora格式的电影文件,但我遇到了一些奇怪的问题,我一直无法解决 为了澄清,我的资产文件夹中有一个名为“Movies/”的文件夹,其中包含所有本地存储的电影文件 下面是我的应用程序的C#代码片段,它位于使用Start例程运行的类方法中: WWW www = new WWW("file://" + Application.dataPath + "/Movies/" + movieName + ".ogg"); yield return www; m_

我正在使用Unity WWW对象加载ogg theora格式的电影文件,但我遇到了一些奇怪的问题,我一直无法解决

为了澄清,我的资产文件夹中有一个名为“Movies/”的文件夹,其中包含所有本地存储的电影文件

下面是我的应用程序的C#代码片段,它位于使用Start例程运行的类方法中:

WWW www = new WWW("file://" + Application.dataPath + "/Movies/" + movieName + ".ogg");
yield return www;
m_MovieTexture = www.movie;
if (m_MovieTexture == null)
{
    DbgLog("Movie is NULL!");
    return;
}
if (m_MovieTexture.isPlaying)
{
    // Not sure how this can happen, but just in case....
    m_MovieTexture.Stop();
}
else
{
    if (www.error != null)
    {
        DbgLog("Error: " + www.error);
        return;
    }
    DbgLog("Waiting to load " + www.url);
    while (!m_MovieTexture.isReadyToPlay && !www.isDone)
    {
        yield return www;
    }
    DbgLog("Finished Loading");
    if (www.isDone && !m_MovieTexture.isReadyToPlay)
    {
        DbgLog("Weirdness!  File finished loading before movie was ready to play!");
    }
}
m_MovieTexture.Play();
DbgLog("Playing video (" + m_MovieTexture.duration + " seconds)");
while (m_MovieTexture.isPlaying)
    yield return null;
// be kind... rewind.
m_MovieTexture.Stop();
DbgLog("Finished Playing");
m_MovieTexture = null;
执行上述代码时,其中的日志语句显示www.isDone属性返回true,即使m_MovieTexture.isReadyToPlay返回false。最初,while循环只等待m_MovieTexture.isReadyToPlay,但该循环无休止地等待,因此添加了额外的条件,从而暴露了真正发生的情况。电影的持续时间也始终为-1,最后,上面的代码似乎根本不等待视频播放,尽管显式调用了m_MovieTexture.play(),然后在m_MovieTexture.isplay为true时循环,m_MovieTexture.isplay立即返回false,电影从不播放(OnGUI方法中有代码显示m_MovieTexture的内容(如果有)并且电影正在播放,但问题似乎在于上面的代码,而不是OnGUI方法)

任何关于我在这里可能做错什么的想法都将不胜感激


提前感谢WWW已经是一个非阻塞的协同例程。因此,您可以使用一个函数,指示您的WWW实例加载视频并将电影分配给m_MovieTexture。然后在OnGUI或更新函数中检查

if(m_MovieTexture!=null && !m.isPlaying && m.isReadyToPlay) m_MovieTexture.play();

这里是指向doc的链接。

WWW已经是一个非阻塞的协同例程。因此,您可以使用一个函数,指示您的WWW实例加载视频并将电影分配给m_MovieTexture。然后在OnGUI或更新函数中检查

if(m_MovieTexture!=null && !m.isPlaying && m.isReadyToPlay) m_MovieTexture.play();
这是指向doc的链接