小编典典

Android的Unity3d WWW类非常慢

json

我想使用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。


阅读 322

收藏
2020-07-27

共1个答案

小编典典

没有设置可以加快速度WWW。如果速度较慢,则说明它要么在移动设备上实施不佳,要么设备又旧又慢。请注意,您的计算机大多数时候都比移动设备快,因此这可能是您认为很慢的原因。


替代方案

1 现在,让我们假设这WWW是问题所在。有一个应该替换的新Unity API
WWW。那就是UnityWebRequestAPI。

真的很容易使用:

IEnumerator makeReuest()
{
    UnityWebRequest www = UnityWebRequest.Get("YourURL");
    yield return www.Send();
    string text = www.downloadHandler.text;
}

2。使用
C#WebRequest发出请求。将proxy变量设置null为,以加快请求速度。您必须在另一个应用程序中使用它,Thread或者使用其异步功能发出请求,否则,您将冻结游戏直到请求完成。

UnityThread从这里开始抓取,因为本示例将使用Unity
ThreadPoolUnityThread如果您想使用Unity
API(例如Text来自另一个组件的组件),则需要使用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;
    });
}

希望其中之一可以加快您的请求。如果那没有发生,那就是您设备的限制。

2020-07-27