我有一个团结的场景。它使用http请求获取图像并每两秒显示一次。这些图像的顺序很重要。那么,该计划的步骤:
我的代码在这里:
int counter = 0;
float tempTimeLimit = 0;
void Update()
{
if (tempTimeLimit > 1)
{
// Decrease timeLimit.
tempTimeLimit -= Time.deltaTime;
}
else
{
StartCoroutine(_Refresh());
tempTimeLimit = timeLimit;
}
}
IEnumerator _Refresh ()
{
if (counter < 19)
{
counter += 1;
......
var req = new WWW(url);
yield return req;
byte[] data = req.texture.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/../" + counter + ".png", data);
GetComponent<Renderer>().material.mainTexture = req.texture;
}
}
我希望我看到19个png文件。但我只看到8-9-10个文件。Unity documentation说
这将等到协程执行完毕。
所以我希望我的代码能够成功运行,但不会。
编辑
我将变量定义为标志。我初衷并控制它等待。这个对我有用。
void Update()
{
if (!wait)
{
wait = true;
StartCoroutine(_Refresh());
counter ++;
}
}
IEnumerator _Refresh ()
{
if (counter < 19)
{
..........
var req = new WWW(url + "?" + qs);
yield return req;
if (req != null)
wait = false;
}
}
答案 0 :(得分:0)
从几个角度来看,这是错误的,但最重要的是你无法保证在给定的时间内完成提取图像。尝试这样的事情:
void Start()
{
StartCoroutine(_Refresh());
}
IEnumerator _Refresh ()
{
counter = 0;
while (counter < 19)
{
counter += 1;
......
var req = new WWW(url);
yield return req;
byte[] data = req.texture.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/../" + counter + ".png", data);
GetComponent<Renderer>().material.mainTexture = req.texture;
}
}