如何将UnityWebRequest使用的Url更新为InputField?

How to update Url used by UnityWebRequest to InputField?

我希望用户能够更改 link 的 ID,这就是我使用 InputField 来获取他们的输入的原因。不幸的是,我似乎无法弄清楚,如何让它与协程一起顺利工作。 当我尝试更新 link 时,它就像下面的实现一样以无限循环结束。当我不更新 link 时,协程似乎在没有获得输入的情况下启动并卡住了。 如果有任何帮助,我将不胜感激。

public class CSVDownloader : MonoBehaviour
{

    public static string googleSheetDocID;
    public static string url;
    public InputField InputField;
    public static string csvDownloaded;
    
    public static CSVParametersData downloadedData;

    public void Start()
    {
        googleSheetDocID = InputField.text;
        Debug.Log(googleSheetDocID);
        StartCoroutine(DownloadData());
        
    }

    public void Update()
    {
        googleSheetDocID = InputField.text;
        Debug.Log(googleSheetDocID);
    }

    public static IEnumerator DownloadData()
    {
        Debug.Log(("In Coroutine"));
        //url = "https://docs.google.com/spreadsheets/d/1ufpl1MsxXU2bk0Kt5YT_BkM1uI2WMLxr/export? format=csv";
        url = "https://docs.google.com/spreadsheets/d/" + googleSheetDocID + "/export?format=csv";
        Debug.Log(url);

        UnityWebRequest webRequest = UnityWebRequest.Get(url);
        yield return new WaitForEndOfFrame();
        Debug.Log("Starting Download...");
        yield return webRequest.SendWebRequest();
        Debug.Log("Webrequestsend");
    }
}

多做几步怎么样?

在上面的代码中,用户交互以键盘输入结束。所以试图实时做所有事情是一个问题。

如果唯一的用户交互是键盘,则复杂且难以实现所需的任务。

如果是我,我会改进代码,以便更容易地实现您想要的,方法如下:

将该脚本添加到您的按钮游戏对象

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class CsvDownloader : MonoBehaviour
{
  [SerializeField] private InputField inputField;
  
  private Button changeUrlButotn;
  private string googleSheetDocID;
  private string url;

  private void Awake()
  {
    changeUrlButotn = GetComponent<Button>();
    changeUrlButotn.onClick.AddListener(OnChangeUrl);
  }

  private void OnChangeUrl()
  {
    googleSheetDocID = inputField.text;
    StartCoroutine(DownloadData());
  }

  private IEnumerator DownloadData()
  {
    url = Path.Combine(
      "https://docs.google.com/spreadsheets/d",
      googleSheetDocID,
      "export?format=csv");

    Debug.Log(url);

    using var unityWebRequest = UnityWebRequest.Get(url);
    unityWebRequest.SendWebRequest();

    while (!unityWebRequest.isDone)
    {
      yield return null;
      
      // Things to process in units of frames
      // when unityWebRequest has not finished downloading ex) progress
      // ...
    }

    Debug.Log("Success DownloadData()");
  }
}

将使用键盘输入 InputField 的部分与更新 googleSheetDocID.

的部分分开

仅供参考,正如 @Max Play 所说,无限循环不会发生。

希望你的问题得到解决:)