我想使用WWW-class下载一个简单的json。 我的问题是在Android设备中完成任务需要3到4秒,但在编辑器中它完成的时间是毫秒......
我做错了什么?
这是我的代码:
string url = "SomeURL/app.Json";
WWW www = new WWW (url);
www.threadPriority = ThreadPriority.High;
DebugText.text = "get json started";
yield return www;
DebugText.text = "Json Downloaded";
PS1:我为两台设备使用了相同的网络。
PS2:Json文件小于1 KB。
答案 0 :(得分:2)
没有设置加速WWW
。如果它很慢那么这意味着它要么在移动设备上实现得不好,要么设备老旧又慢。请注意,您的计算机大多数时间都比移动设备快,因此可能是您认为速度慢的计算机。
替代:
1 。现在,我们假设WWW
是问题所在。有一个新的Unity API可以取代WWW
。这是UnityWebRequest
API。
它非常易于使用:
IEnumerator makeReuest()
{
UnityWebRequest www = UnityWebRequest.Get("YourURL");
yield return www.Send();
string text = www.downloadHandler.text;
}
2 。使用C#WebRequest
发出请求。将代理变量设置为null
,因为这已知可以加速请求。您必须在另一个Thread
中使用此功能,或者使用其异步功能发出请求,否则您将冻结您的游戏,直到请求完成。
从here抓取UnityThread
,因为此示例将为Unity ThreadPool
,如果您想使用Unity API,例如Text
组件,则需要UnityThread
另一个Thread
。
void Awake()
{
//UnityThread.initUnityThread();
downloadData();
}
void downloadData()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(makeRequest));
}
private void makeRequest(object a)
{
string url = "";
string result = "";
var request = (HttpWebRequest)WebRequest.Create(url);
//Speed up
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
var encoding = Encoding.GetEncoding(response.CharacterSet);
using (var responseStream = response.GetResponseStream())
using (var reader = new StreamReader(responseStream, encoding))
result = reader.ReadToEnd();
}
UnityThread.executeInUpdate(() =>
{
//Use in Unity Thread
yourTextComponent.text = result;
});
}
希望其中一个能加快你的要求。如果没有发生这种情况,则说明您的设备有限制。