我想使用WWW类下载一个简单的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。
没有设置可以加快速度WWW。如果速度较慢,则说明它要么在移动设备上实施不佳,要么设备又旧又慢。请注意,您的计算机大多数时候都比移动设备快,因此这可能是您认为很慢的原因。
WWW
替代方案 :
1 现在,让我们假设这WWW是问题所在。有一个应该替换的新Unity API WWW。那就是UnityWebRequestAPI。
UnityWebRequest
真的很容易使用:
IEnumerator makeReuest() { UnityWebRequest www = UnityWebRequest.Get("YourURL"); yield return www.Send(); string text = www.downloadHandler.text; }
2。使用 C#WebRequest发出请求。将proxy变量设置null为,以加快请求速度。您必须在另一个应用程序中使用它,Thread或者使用其异步功能发出请求,否则,您将冻结游戏直到请求完成。
WebRequest
null
Thread
UnityThread从这里开始抓取,因为本示例将使用Unity ThreadPool,UnityThread如果您想使用Unity API(例如Text来自另一个组件的组件),则需要使用Thread。
UnityThread
ThreadPool
Text
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; }); }
希望其中之一可以加快您的请求。如果那没有发生,那就是您设备的限制。