如何将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 所说,无限循环不会发生。
希望你的问题得到解决:)
我希望用户能够更改 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 所说,无限循环不会发生。
希望你的问题得到解决:)