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("需要对象引用
这个问题实际上与协程没有任何关系。
发生这种情况是因为您尝试从静态方法调用两个实例方法。也就是说,DownloadAndCache
和StartCoroutine
是实例方法,但它们不是静态的,因此它们需要其类Foo
的实例才能执行。
DownloadAndCache
可以是静态的,所以你不需要实例,但如果没有一个 MonoBehavior 实例来调用StartCoroutine
,你将无法逃脱。