枚举器启动函数,返回收益率

时间:2017-05-11 23:08:51

标签: c# unity3d ienumerator

我目前正致力于团结,我正在尝试使用WWW类从网上下载数据。我的代码如下。

  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中运行代码,然后完成启动功能。

我想要的是,完成运行启动功能,然后开始运行更新功能。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以添加名为awakeFinished的bool字段,并在Awake方法的末尾设置为true。然后Update方法可以在执行任何其他操作之前检查awakeFinished是否为真,如果为false,则返回。

答案 1 :(得分:1)

您可以创建一个在Awake方法结束时表现得像更新的Coroutine,而不是使用Update。

IEnumerator Awake () {
    //...
    //Old Awake code goes here
    //...
    StartCoroutine(CheckForUpdates());
}


IEnumerator CheckForUpdates () {

     while(true) {
         //Put your Update code here instead
         yield return null;
     }

}

只要Coroutine运行,while循环就会每帧执行一次。