2016-04-04 2 views
0

Ich habe eine Einheitsszene. Es ruft ein Bild mit HTTP-Anfragen ab und zeigt sie alle zwei Sekunden an. Die Reihenfolge dieser Bilder ist wichtig. So Schritte des Programms:Wie verwendet man Coroutine, die http-Anfrage enthält?

  1. Machen Sie sich ein Bild unter Verwendung von HTTP-Anfrage
  2. Zeigen Sie es, zu aktualisieren Indexzähler
  3. Zum Schritt 1

Mein Code ist hier:

int counter = 0; 
    float tempTimeLimit = 0; 

    void Update() 
    { 
     if (tempTimeLimit > 1) 
     { 
      // Decrease timeLimit. 
      tempTimeLimit -= Time.deltaTime; 
     } 
     else 
     { 
      StartCoroutine(_Refresh()); 
      tempTimeLimit = timeLimit; 
     }  
    } 

    IEnumerator _Refresh() 
    { 
     if (counter < 19) 
     { 
      counter += 1; 
      ......  
      var req = new WWW(url); 

      yield return req; 

      byte[] data = req.texture.EncodeToPNG(); 
      File.WriteAllBytes(Application.dataPath + "/../" + counter + ".png", data); 

      GetComponent<Renderer>().material.mainTexture = req.texture; 

     } 
    } 

Ich erwarte, dass ich 19 Png-Dateien sehe. Aber ich sehe nur 8-9-10 Dateien. Unity documentation sagt, dass

Dies wird warten, bis die Coroutine die Ausführung beendet hat.

Also erwarte ich, dass mein Code erfolgreich funktioniert, aber nicht.

EDIT

definiere ich eine Variable als Flag. Ich initialisiere und kontrolliere es, um zu warten. Für mich geht das.

void Update() 
{ 
     if (!wait) 
     { 
      wait = true; 
      StartCoroutine(_Refresh()); 
      counter ++; 
     } 
} 
IEnumerator _Refresh() 
{ 
    if (counter < 19) 
    { 
     .......... 
     var req = new WWW(url + "?" + qs); 
     yield return req; 
     if (req != null) 
      wait = false; 
    } 
} 
+0

Sie sagten, Sie erwarten 19 Png-Dateien, so bedeutet dies, dass Sie Bild und zeigen Sie es alle 2 Sekunden 19 mal? Sind diese Bilder vom selben Link oder laden Sie das gleiche Bild 19 Mal herunter? Was versuchst du zu machen? – Programmer

+0

Dies ist der seltsamste Code, den ich in meinem Leben gesehen habe – Fattie

+0

** WICHTIG ** Sie müssen unbedingt ** Application.persistentDataPath **. Dies ist eine unglaublich verwirrende Sache über Unity. (1) Sie müssen - immer - überall - nur - verwenden ** Application.persistentDataPath ** Dennoch (2) Unity erwähnt andere Wege in der Doco. Aber (3) ** siehe Punkt 1 **. – Fattie

Antwort

0

Das ist falsch von einigen Gesichtspunkten, aber am wichtigsten ist, haben Sie keine Garantie haben, dass Bildabruf wird in gegebener Zeit erfolgen. Versuchen Sie etwas wie folgt:

+0

Um nur Start-Funktion zu laufen ist nicht genug für mich.Ich brauche es zur Laufzeit viele Male. – zumma

Verwandte Themen