Unity3d WWW-class与android非常慢

时间:2017-04-28 06:27:56

标签: android json unity3d

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

1 个答案:

答案 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;
    });
}

希望其中一个能加快你的要求。如果没有发生这种情况,则说明您的设备有限制。