C# 枚举数开始函数,返回结果

C# 枚举数开始函数,返回结果,c#,unity3d,ienumerator,C#,Unity3d,Ienumerator,我目前正在unity上工作,我正在尝试使用WWW类从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 imgLinkSrin

我目前正在unity上工作,我正在尝试使用WWW类从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);

        }

    }


}
IEnumerator Awake()
{
WWW-imgLinks=new-WWW(imgConnection);//我在这里尝试下载图像链接。
yield return imgLinks;//此处应下载图像URL。
字符串imgLinkSring=imgLinks.text;
imgLinksArray=imgLinkSring.Split(“;”);//它们被“;”分割
//---
字符串\u imgURL=“无数据。”;
字符串_tag=“”;
for(int i=0;i
问题是,如果我的代码中没有Update(),那么它就可以正常工作。当我有Update()时,代码从跳转到Update函数,并返回imgLinks并运行Update内部的代码,然后完成start函数

我想要的是,完成运行Start函数,然后开始运行Update函数


我该怎么办?

您可以创建一个协同程序,其行为类似于唤醒方法结束时的更新,而不是使用更新

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


IEnumerator CheckForUpdates () {

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

}

只要协同路由运行,while循环将每帧执行一次。

您可以创建一个协同路由,其行为类似于唤醒方法结束时的更新

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


IEnumerator CheckForUpdates () {

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

}


只要协同程序运行,while循环将每帧执行一次。

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

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

更新每帧运行一次。如果您的start方法产生并需要时间,则在等待过程中,Update绝对会被调用。@Draco18s那么我如何才能实现我想要的?您需要等待协同程序完成,然后才能对其数据执行任何操作。如果您正在对其执行每帧操作,则需要首先检查数据是否已完全下载,如果未完全下载,则什么也不做。@Draco18s是的,我知道该怎么做?
首先检查数据是否存在
。。。嗯…
如果(textureDatas2.count>0)
?更新每帧运行一次。如果您的start方法产生并需要时间,则在等待过程中,Update绝对会被调用。@Draco18s那么我如何才能实现我想要的?您需要等待协同程序完成,然后才能对其数据执行任何操作。如果您正在对其执行每帧操作,则需要首先检查数据是否已完全下载,如果未完全下载,则什么也不做。@Draco18s是的,我知道该怎么做?
首先检查数据是否存在
。。。嗯…
如果(textureDatas2.count>0)
?你能把它再扩展一点吗?比如我怎么做?而且,我已经有用Update()编写的代码了,如果我现在修改它们会不会有问题?希望我的编辑使它更容易理解。CheckForUpdates方法的作用类似于Update(),您只需要手动启动它。我了解您的方式,当我在一个简单的项目中尝试它时是的,它工作正常谢谢您,因为我在Update()中连接了函数,当我尝试此解决方案时,它工作不正常。你能不能用另一种方式思考?你能把它扩展得更多吗?比如我怎么做?而且,我已经有用Update()编写的代码了,如果我现在修改它们会不会有问题?希望我的编辑使它更容易理解。CheckForUpdates方法的作用类似于Update(),您只需要手动启动它。我了解您的方式,当我在一个简单的项目中尝试它时是的,它工作正常谢谢您,因为我在Update()中连接了函数,当我尝试此解决方案时,它工作不正常。你能有其他的想法吗?我怎么能回来呢?我这样做了,到目前为止效果很好,非常感谢你。但我做的有点不同。我确实添加了awakefined,如果没有,我只是在update()函数中创建了这个.start(),在start()的开头,我检查是否已经由awakefined启动。可能我做的不对,我觉得我不应该在更新中调用这个.start(),但我不知道其他方法。你有什么建议吗?我不太明白,但是你能不能把
start
中的代码放在
awake
的末尾,然后完全删除
start
中的代码?我怎么能回来呢?我就是这么做的,到目前为止都很有效,非常感谢你。但我做的有点不同。我确实添加了awakefined,如果没有,我只是在update()函数中创建了这个.start(),在start()的开头,我检查是否已经由awakefined启动。可能我做的不对,我觉得我不应该在更新中调用这个.start(),但我不知道其他方法。你有什么建议吗?我不太明白,但是你能把
start
中的代码放在
awake
的末尾,然后完全删除
start
吗?