IEnumerator 让位于另一个 IEnumerator 的结果

本文关键字:IEnumerator 结果 另一个 | 更新日期: 2023-09-27 18:00:37

我的项目中设置了两个类。

在第一堂课上按下按钮时,我正在按按钮调用第一个IEnumerator

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

被调用的方法如下所示(在另一个类中(:

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

但是,我打算此方法仅在从第二个 ping 服务器并等待几秒钟以获得结果的第二个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.MonoBehavior.StartCoroutine(System.Collections.IEnumerator("需要对象引用

IEnumerator 让位于另一个 IEnumerator 的结果

这个问题实际上与协程没有任何关系。

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

DownloadAndCache可以是静态的,所以你不需要实例,但如果没有一个 MonoBehavior 实例来调用StartCoroutine,你将无法逃脱。