为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
智慧大石 2022-11-21 20:27:15
我正在尝试在 Unity Editor 中使用自己的 EditorWindow 构建一个工具。该工具需要通过 PHP 文件访问 MySQL 数据库,因此我需要使用协程。我寻找解决方案并找到了预览包“Editor Coroutine”并安装了它。我不明白它是如何工作的,文档也没有说明任何(或我所理解的)如何使用它。你知道有什么方法可以使这个东西正常工作吗?我试图简单地做一个“StartCoroutine()”,从编辑器类调用它或创建一个对象(GameObject)来调用它,但这些都不起作用:/。
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

请注意,接受答案的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 once

EditorApplication.update -= ProcessDownload;

EditorApplication.update += ProcessDownload;


currentDownload = UpdateVersion("whatever string");


查看完整回答
反对 回复 2022-11-21
?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

我遇到了同样的问题。我最终得到了以下代码,它以非协程方法执行 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);

    }

}


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号