Как сохранить изображение в Unity, которое я получаю от Firebase? - PullRequest
0 голосов
/ 04 июня 2019

Я подключаюсь к Firebase из Unity и получаю из него простое изображение. Но я хочу знать, как я могу сохранить это изображение, например, в папке Assets проекта Unity?

void Start()
{  
    FirebaseStorage storage = FirebaseStorage.DefaultInstance;
    Firebase.Storage.StorageReference path_reference = storage.GetReference("background/1.jpg")

    "SavetoAssets = storage.GetReference("background/1.jpg")" // something like that.
}

1 Ответ

1 голос
/ 04 июня 2019

Этот пост - почти то, что вам нужно.Я просто расширил его с помощью части FileIO, используя FileStream.WriteAsync и использовал UnityWebRequestTexture вместо WWW:

private void Start()
{
    FirebaseStorage storage = FirebaseStorage.DefaultInstance;
    Firebase.Storage.StorageReference path_reference = storage.GetReference("background/1.jpg");


    path_reference.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(DownloadImage(data_URL));
           }
       }
    );
}

private IEnumerator DownloadImage(string url)
{
    using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(url))
    {
        yield return uwr.SendWebRequest();

        if (uwr.isNetworkError || uwr.isHttpError)
        {
            Debug.Log(uwr.error);
        }
        else
        {
            // Instead of accessing the texture
            //var texture = DownloadHandlerTexture.GetContent(uwr);

            // you can directly get the bytes
            var bytes = DownloadHandlerTexture.GetData(uwr);

            // and write them to File e.g. using
            using (FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate))
            {
                fileStream.WriteAsync(bytes, 0, bytes.Length);
            }
        }
    }
}

Примечание: я не использую Firebase, Android или iOs, поэтому я не смог проверить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...