Unity3D中的MovieTexture永远不会准备好播放
本文关键字:准备好 播放 永远 中的 MovieTexture Unity3D | 更新日期: 2023-09-27 18:01:43
我正在使用一个Unity WWW对象来加载一个ogg - theora格式的电影文件,但是我遇到了一些奇怪的问题,我还没能弄清楚如何解决。
为了澄清,我在我的资产文件夹中有一个名为"Movies/"的文件夹,其中包含了我本地存储的所有电影文件。
下面是我的应用程序的c#代码片段,它是在使用StartCoroutine运行的类方法中:
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时循环,但上述代码似乎并不等待视频播放。isPlaying是true, m_MovieTexture。isPlaying立即返回false,电影永远不会播放(OnGUI方法中有代码显示m_MovieTexture的内容,如果有的话,电影正在播放,但问题似乎在于上面的代码,而不是OnGUI方法)。
如果你能告诉我哪里做错了,我将不胜感激。
Thanks in advance
WWW已经是一个非阻塞的协同程序。所以你可以有一个函数,指示你的WWW实例加载视频,并将电影分配给你的m_MovieTexture。然后在OnGUI或Update函数中检查
if(m_MovieTexture!=null && !m.isPlaying && m.isReadyToPlay) m_MovieTexture.play();
这是MovieTexture的链接。onIsReadyToplay doc .