2016-05-06 7 views
0

Ich hole einige Daten in einem unity Spiel mit WWW Bibliothek. Nach einiger Zeit ein Fehler beginnt in der Einheit-Editor zu zeigenm_defaultpriority == 0 Fehler in der Einheit

m_DefaultPriority == 0 
UnityEngine.WWW:.ctor 

Auf Einheit Forum sagen, es wird gesagt, dass dies geschieht, wenn es zu viele gleichzeitigen WWW Fäden sind. Aber es gibt maximal 3 gleichzeitige WWW Threads gleichzeitig. Kann mir jemand sagen, was die mögliche Ursache für diesen Fehler ist und wie er gelöst werden kann.

Hier ist meine Verbindung Herstellung Code:

IEnumerator Load (ServerRequestData data,float delay=0) 
    { 
     if(delay>0) 
      yield return new WaitForSeconds (delay); 

     lastCallType = data.requestType; 
     requestsAwaiting++; 
     data.timeStamp= System.DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss:fff"); 

     double time= System.DateTime.Now.TimeOfDay.TotalMilliseconds; 

     WWW www; 
     if (data.requestFrom != null){ 
      www = new WWW (data.requestUrl, data.requestFrom); 
     }else{ 
      www = new WWW (data.requestUrl);//Get request 
     } 

     this.concurrentWWWThreads++; 

     yield return www; 

     requestsAwaiting--; 


     AfterResponse(www,data,time); 

     www.Dispose(); 
     www=null; 
     this.concurrentWWWThreads--; 

    } 

Dank

+0

Wenn Sie Ihren WWW-Code tatsächlich veröffentlichen, stellt jemand eine andere Möglichkeit bereit, eine Verbindung ohne WWW herzustellen. – Programmer

+0

@Programmierer danke – Jain

Antwort

0

Statt WWW zu verwenden, verwenden UnityWebRequest statt. Der folgende Code übersetzt Ihre WWW Ladefunktion in die neue Unity-Web-API. Da der ursprüngliche Code nicht vollständig ist, konnte ich ihn nicht testen. Daher funktioniert er möglicherweise nicht. Sie müssen möglicherweise ein wenig Änderung vornehmen, wenn es nicht funktioniert.

IEnumerator Load(ServerRequestData data, float delay = 0) 
{ 
    if (delay > 0) 
     yield return new WaitForSeconds(delay); 

    lastCallType = data.requestType; 
    requestsAwaiting++; 
    data.timeStamp = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"); 

    double time = System.DateTime.Now.TimeOfDay.TotalMilliseconds; 


    UnityWebRequest www; 
    if (data.requestFrom != null) 
    { 
     www = UnityWebRequest.Post(data.requestUrl, data.requestFrom); 
    } 
    else 
    { 
     www = UnityWebRequest.Get(data.requestUrl); 
    } 

    this.concurrentWWWThreads++; 

    yield return www.Send(); 

    if (www.isError) 
    { 
     Debug.Log("Error Occoured: " + www.error); 
    } 
    else 
    { 
     Debug.Log("Successfully Uploaded Form!"); 
    } 

    requestsAwaiting--; 


    AfterResponse(www, data, time); 

    www.Dispose(); 
    www = null; 
    this.concurrentWWWThreads--; 
} 
+0

danke für deine antwort. Aber der Grund für mein Problem ist noch unbekannt. Und woher weißt du, dass das gleiche Problem sich mit dieser Lösung nicht reproduzieren wird. – Jain

+0

auch meine Version der Einheit ist 4.6.7 und diese UnityEngine.Experimental.Networking wurde in späteren Versionen hinzugefügt. Können Sie einen Verweis auf die Referenz der Bibliothek, auf die Sie sich beziehen, angeben? – Jain

+0

@Jain 'UnityWebRequest' ist eine neue Unity-API, die' WWW' ersetzt. Sie müssen Unity 5.3 und höher haben, damit dies funktioniert. http://docs.unity3d.com/Manual/UnityWebRequest.html Ich verwende 5.4. In Unity 5.4 befindet es sich nicht mehr im Experimentalmodus und kann verwendet werden, indem Sie UnityEngine.Networking verwenden. – Programmer

Verwandte Themen