亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用“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 關注
  • 198 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號