IEnumerator屈服于另一个IEnumerator的结果

时间:2014-04-28 14:37:20

标签: c# unity3d ienumerator

我的项目中设置了两个班级。

按下第一节课的按钮我按下按钮时调出第一个IEnumerator

if(GUI.Button(new Rect(250, 0, 100, 20), "clear"))
{
   StartCoroutine(Foo.test());
}

被调用的方法看起来像这样(在另一个类中):

public static IEnumerator test()
{     
    yield return StartCoroutine(DownloadAndCache());
    // do stuff
}

但是,我打算这个方法只有从第二个IEnumerator返回一个服务器并等待几秒钟才能得到结果后才能执行它的操作。

此方法如下:

IEnumerator  DownloadAndCache ()
{
    // Wait for the Caching system to be ready
    while (!Caching.ready)
        yield return null;

    Debug.Log("downloading asset bundle");
    // Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
    using(WWW www = WWW.LoadFromCacheOrDownload (jsonURL, version))
    {
        yield return www;
        if (www.error != null)
        {
            throw new Exception("WWW download had an error: " + www.error);
        }

        AssetBundle bundle = www.assetBundle;
        if (AssetName == "")
        {
            Instantiate(bundle.mainAsset);
        }
        else
        {
            Instantiate(bundle.Load(AssetName));
        }

        bundle.Unload(false);

    } 
}

但是,当我实现它时,我的测试方法声称不设置为实例。我不想制作这些脚本的新副本,因为我每次都需要重置链接。我有办法让这个工作吗?

我得到的错误如下:

  

访问非静态成员`UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)'

需要对象引用

1 个答案:

答案 0 :(得分:0)

问题实际上与协同程序没有任何关系。

这是因为您尝试从静态方法调用两个实例方法。也就是说,DownloadAndCacheStartCoroutine是实例方法,它们不是静态的,因此需要执行其类Foo的实例。

DownloadAndCache可能是静态的,因此您不需要实例,但如果没有使用MonoBehaviour实例来调用StartCoroutine,您将无法逃脱。