我对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;
}
}
}
}
答案 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
分配给相关对象。
如果您分享一些关于这些电影的加载程序的信息,将会有所帮助。