2016-06-02 5 views
0

Ich habe einen Code, mit dem ich alle meine Bildpfade auf meinem Android-Gerät erfassen kann. Dann möchte ich diese Bilder in Textur laden mit www classs, wie zum Beispiel:Unity LoadImageIntoTexture funktioniert nicht

public void SetImage() 
{ 
    List<string> galleryImages = GetAllGalleryImagePaths(); 

    DebugText.text = galleryImages.Count.ToString() + " images found"; 

    DisplayPanel.SetActive(true); 
    ControlPanel.SetActive(false); 

    for (int i = 0; i < galleryImages.count; i++) 
    { 
     WWW www = new WWW(galleryImages[i]); 

     Texture2D t = new Texture2D(2, 2); 
     www.LoadImageIntoTexture(t); 

     GameObject imgObj = Instantiate(Resources.Load("GalleryImage")) as GameObject; 
     imgObj.GetComponent<RawImage>().texture = t; 
     imgObj.transform.SetParent(contentHolder.transform); 
    } 
} 

Wenn ich jedoch www.LoadImageIntoTexture (t) und Schleife zu oft nennen, wird die App nur springen zu Hause Bildschirm. (ein paar Mal, wie 20 mal, ist in Ordnung)

Wer kennt das Problem und wie es zu beheben?

Antwort

1

Sie warten nicht, bis Ihre Downloads abgeschlossen sind, bevor Sie fortfahren. Sie müssen entweder für die WWW Objekte zurückgeben, oder Sie müssen manuell überprüfen, ob sie fertig sind oder nicht.

es als Koroutine arbeiten zu lassen, können Sie Ihren Code

public IEnumerator SetImage() 
{ 
    List<string> galleryImages = GetAllGalleryImagePaths(); 

    DebugText.text = galleryImages.Count.ToString() + " images found"; 

    DisplayPanel.SetActive(true); 
    ControlPanel.SetActive(false); 

    for (int i = 0; i < galleryImages.count; i++) 
    { 
     WWW www = new WWW(galleryImages[i]); 
     yield return www; //Wait for the download to complete 

     Texture2D t = new Texture2D(2, 2); 
     www.LoadImageIntoTexture(t); 

     GameObject imgObj = Instantiate(Resources.Load("GalleryImage")) as GameObject; 
     imgObj.GetComponent<RawImage>().texture = t; 
     imgObj.transform.SetParent(contentHolder.transform); 
    } 
} 

Entweder das, oder überprüfen Sie jede WWW Instanz für isDone ändern.

+0

Ja, er wartet nicht. – Programmer