Unity WWW オブジェクトを使用して、ogg theora 形式のムービー ファイルを読み込んでいますが、解決方法がわからないという奇妙な現象が発生しています。
明確にするために、Assets フォルダーに "Movies/" というフォルダーがあり、ローカルに保存されているすべてのムービー ファイルが含まれています。
私のアプリケーションの AC# コード スニペットは次のとおりです。これは、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;
上記のコードを実行すると、m_MovieTexture.isReadyToPlay が false を返しても、www.isDone プロパティが true を返すことがログ ステートメントで明らかになります。元々、while ループは m_MovieTexture.isReadyToPlay でのみ待機していましたが、そのループは無限に待機していたため、余分な条件が追加され、実際に何が起こっているかが明らかになりました。ムービーの長さも常に -1 であり、最後に、上記のコードは、m_MovieTexture.Play() を明示的に呼び出して m_MovieTexture.isPlaying が実行されている間にループしているにもかかわらず、ビデオが再生されるのをまったく待機していないように見えます。 true、m_MovieTexture.isPlaying はすぐに false を返し、ムービーは再生されません (m_MovieTexture のコンテンツが存在し、ムービーが再生されている場合に OnGUI メソッドにコードが表示されますが、問題は上記のコードではなく、上記のコードにあるようですOnGUI メソッド)。
ここで私が間違っているかもしれないことについての考えは大歓迎です。
前もって感謝します