【发布时间】:2018-07-16 01:01:12
【问题描述】:
我正在使用 Unity 创建一个 HoloLens 应用程序,该应用程序必须从 REST API 获取数据并显示它。 我目前正在使用 WWW 数据类型在将从 Update() 函数调用的协程中获取数据并产生返回语句。当我尝试运行代码时,我从 API 获取最新数据,但是当有人将任何新数据推送到 API 时,它不会自动实时获取最新数据,我必须重新启动该应用程序以查看最新数据。 我的代码:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
public class TextChange : MonoBehaviour {
// Use this for initialization
WWW get;
public static string getreq;
Text text;
bool continueRequest = false;
void Start()
{
StartCoroutine(WaitForRequest());
text = GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
}
private IEnumerator WaitForRequest()
{
if (continueRequest)
yield break;
continueRequest = true;
float requestFrequencyInSec = 5f; //Update after every 5 seconds
WaitForSeconds waitTime = new WaitForSeconds(requestFrequencyInSec);
while (continueRequest)
{
string url = "API Link goes Here";
WWW get = new WWW(url);
yield return get;
getreq = get.text;
//check for errors
if (get.error == null)
{
string json = @getreq;
List<MyJSC> data = JsonConvert.DeserializeObject<List<MyJSC>>(json);
int l = data.Count;
text.text = "Data: " + data[l - 1].content;
}
else
{
Debug.Log("Error!-> " + get.error);
}
yield return waitTime; //Wait for requestFrequencyInSec time
}
}
void stopRequest()
{
continueRequest = false;
}
}
public class MyJSC
{
public string _id;
public string author;
public string content;
public string _v;
public string date;
}
【问题讨论】:
-
您不应该像在问题中那样在 Update 函数中调用协程函数。这就像在一秒钟内发出 60 多个请求。我已经在您的问题中解决了这个问题,方法是将其替换为等待然后再次发出请求的代码。如果这不能解决您的问题,请查看我的答案。
-
你试过解决方案了吗?
-
是的,它就像一个魅力......
标签: c# unity3d get yield hololens