Unity - загрузка изображения с помощью www приводит к изменению всех изображений в приложении - PullRequest
0 голосов
/ 03 января 2019

Я довольно новичок в Unity, так что это может быть легко.

Я пытаюсь загрузить изображение из URL в изображение в моем приложении.В моем приложении много разных изображений, но по какой-то причине все изображения меняются на изображения, загруженные из моего URL.

Я создал компонент с именем LoadImage и добавил его только к одному желаемому изображению.изменить.Мой код для загрузки изображения выглядит следующим образом:

public class LoadImage : MonoBehaviour 
{

    public Image img; 

    // Use this for initialization
    void Start () 
    {
        DownloadViaURL();
    }

    void DownloadViaURL()
    {
        Debug.Log("Called DownloadViaURL");
        FirebaseDatabase.DefaultInstance
           .GetReference("Child1").Child("Child2").Child("ImageURL")
           .GetValueAsync().ContinueWith(task => 
           {
               Debug.Log("Default Instance entered");
               if (task.IsFaulted)
               {
                   Debug.Log("Error retrieving data from server");
               }
               else if (task.IsCompleted)
               {
                   DataSnapshot snapshot = task.Result;

                   string data_URL = snapshot.GetValue(true).ToString();

                   //Start coroutine to download image
               StartCoroutine(AccessURL(data_URL));
               }
           });
    }

    IEnumerator AccessURL(string url)
    {
        using (WWW www = new WWW(url))
        {
            yield return www;
                 www.LoadImageIntoTexture(img.mainTexture as Texture2D);
            Debug.Log("Texture URL: " + www.url);
        }
    }  
}

И затем я добавил изображение в качестве общедоступного изображения. Img;

Может кто-нибудь сказать, почему единство загрузки изображения во все просмотры изображенийв моем приложении, а не только один?

1 Ответ

0 голосов
/ 04 января 2019

Вы говорите

У меня много разных изображений,

, но я предполагаю, что вы имеете в виду разные Image компоненты, где вы, вероятно, ссылались на одну и ту же текстуру из ваших активовнесколько раз

Итак, ваш код на самом деле перезаписывает любой текстурный ресурс, на который ссылается ваше изображение => он также изменяется во всех других изображениях / материалах и т. д., которые ссылаются на тот же актив текстур.

Лучше создать новую текстуру, загрузить в нее данные и изменить ссылку на текстуру изображения:

// Create new texture
// Size values don't matter because texture will be overwritten
var newTexture = new Texture2D(2,2);

// Load image I new texture
www.LoadImageToTexture(newTexture);

// Use the reference to that new texture
img.mainTexture = newTexture;
...