我的项目中设置了两个班级。
按下第一节课的按钮我按下按钮时调出第一个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)'
需要对象引用
答案 0 :(得分:0)
问题实际上与协同程序没有任何关系。
这是因为您尝试从静态方法调用两个实例方法。也就是说,DownloadAndCache
和StartCoroutine
是实例方法,它们不是静态的,因此需要执行其类Foo
的实例。
DownloadAndCache
可能是静态的,因此您不需要实例,但如果没有使用MonoBehaviour实例来调用StartCoroutine
,您将无法逃脱。