我想使用 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
的设置。如果它很慢,则意味着它要么在移动设备上实现不佳,要么您的设备又旧又慢。请注意,您的计算机在大多数情况下都比移动设备快,因此您可能认为它很慢。
备选方案:
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;
});
}
希望其中之一可以加快您的请求。如果那没有发生,那么这是您设备的限制。
关于android - Unity3d WWW 类在 android 上非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43673410/