如何使用“Editor coroutine”包在 Editor 中启动协程?

我正在尝试在 Unity Editor 中使用自己的 EditorWindow 构建一个工具。该工具需要通过 PHP 文件访问 MySQL 数据库,因此我需要使用协程。我寻找解决方案并找到了预览包“Editor Coroutine”并安装了它。我不明白它是如何工作的,文档也没有说明任何(或我所理解的)如何使用它。你知道有什么方法可以使这个东西正常工作吗?

我试图简单地做一个“StartCoroutine()”,从编辑器类调用它或创建一个对象(GameObject)来调用它,但这些都不起作用:/。


智慧大石
浏览 242回答 2
2回答

桃花长相依

请注意,接受答案的while循环会完全阻止编辑器,直到下载完成。对于简单的文本可能没问题,但对于较大的文件,这可能会成为一个问题。但是EditorApplication.update,您可以订阅以便在编辑器中的每一帧调用一个方法。所以对于 EditorWindow 你可以做类似的事情private IEnumerator currentDownload;private void ProcessDownload(){    if(currentDownload!=null) currentDownload.MoveNext();}private IEnumerator UpdateVersion(string message){    string post_url = NetworkManager.baseUrl + "VersionUpdate.php";    WWWForm form = new WWWForm();    form.AddField("Message", message);     form.AddField("Version", Application.version);    UnityWebRequest www = UnityWebRequest.Post(post_url, form);    www.chunkedTransfer = false;    yield return www.SendWebRequest();    if(www.error == null){        Debug.Log(www.downloadHandler.text);    } else {        Debug.Log("error!: " + www.error);    }}并像使用它// makes sure the callback is added only onceEditorApplication.update -= ProcessDownload;EditorApplication.update += ProcessDownload;currentDownload = UpdateVersion("whatever string");

慕田峪9158850

我遇到了同样的问题。我最终得到了以下代码,它以非协程方法执行 webrequest。private void UpdateVersion(string message){    string post_url = NetworkManager.baseUrl + "VersionUpdate.php";    WWWForm form = new WWWForm();    form.AddField("Message", message);     form.AddField("Version", Application.version);    UnityWebRequest www = UnityWebRequest.Post(post_url, form);    www.chunkedTransfer = false;    www.SendWebRequest();    while (!www.isDone)    {        // do nothing    }       if(www.error == null){        Debug.Log(www.downloadHandler.text);    } else {        Debug.Log("error!: " + www.error);    }}
打开App,查看更多内容
随时随地看视频慕课网APP