枚举器启动函数,Return 产量
Enumerator Start Function, Return Yield
我目前正在研究 unity,我正在尝试使用 WWW class 从 Web 下载数据。我的代码如下。
IEnumerator Awake()
{
WWW imgLinks = new WWW(imgConnection); //Here I am trying to download image links.
yield return imgLinks; //here image URL are supposed to be downloaded.
string imgLinkSring = imgLinks.text;
imgLinksArray = imgLinkSring.Split(';'); //and they are splitted by ";"
//---
string _imgURL = "No data.";
string _tag = "";
for (int i = 0; i < imgLinksArray.Length; i++)
{
if (imgLinksArray[i].Contains("tag:"))
{
_tag = GetdataValue(imgLinksArray[i], "tag:");
_imgURL = GetdataValue(imgLinksArray[i], "name:");
if (_imgURL.Contains("|")) _imgURL = _imgURL.Remove(_imgURL.IndexOf("|"));
if (_tag.Contains("|")) _imgURL = _imgURL.Remove(_imgURL.IndexOf("|"));
WWW imgTextures = new WWW(domainName + "showImage.php?name=" + _tag); //and here imageTextures are supposed to be downloaded by the URL's I downloade in the beginning.
yield return imgTextures;
tex = imgTextures.texture;
textureDatas2.Add(_tag, tex);
}
}
}
问题是,如果我的代码中没有 Update(),它工作正常。当我有 Update() 时,代码从 yield return imgLinks; 跳转到 Update 函数并运行 Update 中的代码,然后完成启动函数。
我想要的是,完成运行启动功能,然后启动运行更新功能。
我该怎么办?
您可以在 Awake 方法的末尾创建一个行为类似于更新的协程,而不是使用更新。
IEnumerator Awake () {
//...
//Old Awake code goes here
//...
StartCoroutine(CheckForUpdates());
}
IEnumerator CheckForUpdates () {
while(true) {
//Put your Update code here instead
yield return null;
}
}
只要协程运行,while 循环就会每帧执行一次。
您可以添加一个名为 awakeFinished
的布尔字段,您在 Awake
方法的末尾将其设置为 true。然后 Update
方法可以在做任何其他事情之前检查 awakeFinished
是否为真,如果为假,则 return.
我目前正在研究 unity,我正在尝试使用 WWW class 从 Web 下载数据。我的代码如下。
IEnumerator Awake()
{
WWW imgLinks = new WWW(imgConnection); //Here I am trying to download image links.
yield return imgLinks; //here image URL are supposed to be downloaded.
string imgLinkSring = imgLinks.text;
imgLinksArray = imgLinkSring.Split(';'); //and they are splitted by ";"
//---
string _imgURL = "No data.";
string _tag = "";
for (int i = 0; i < imgLinksArray.Length; i++)
{
if (imgLinksArray[i].Contains("tag:"))
{
_tag = GetdataValue(imgLinksArray[i], "tag:");
_imgURL = GetdataValue(imgLinksArray[i], "name:");
if (_imgURL.Contains("|")) _imgURL = _imgURL.Remove(_imgURL.IndexOf("|"));
if (_tag.Contains("|")) _imgURL = _imgURL.Remove(_imgURL.IndexOf("|"));
WWW imgTextures = new WWW(domainName + "showImage.php?name=" + _tag); //and here imageTextures are supposed to be downloaded by the URL's I downloade in the beginning.
yield return imgTextures;
tex = imgTextures.texture;
textureDatas2.Add(_tag, tex);
}
}
}
问题是,如果我的代码中没有 Update(),它工作正常。当我有 Update() 时,代码从 yield return imgLinks; 跳转到 Update 函数并运行 Update 中的代码,然后完成启动函数。
我想要的是,完成运行启动功能,然后启动运行更新功能。
我该怎么办?
您可以在 Awake 方法的末尾创建一个行为类似于更新的协程,而不是使用更新。
IEnumerator Awake () {
//...
//Old Awake code goes here
//...
StartCoroutine(CheckForUpdates());
}
IEnumerator CheckForUpdates () {
while(true) {
//Put your Update code here instead
yield return null;
}
}
只要协程运行,while 循环就会每帧执行一次。
您可以添加一个名为 awakeFinished
的布尔字段,您在 Awake
方法的末尾将其设置为 true。然后 Update
方法可以在做任何其他事情之前检查 awakeFinished
是否为真,如果为假,则 return.