1. 程式人生 > 其它 >Unity載入網路圖片的兩種方式

Unity載入網路圖片的兩種方式

技術標籤:筆記unity3d

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

/*
 * 
 *  Writer:June
 * 
 *  Date: 2020.12.26
 * 
 *  Function:兩種從網路上下載圖片的請求方式
 * 
 *  Remarks:這些方法僅支援Image元件
 * 
 */


public class RequestData : MonoBehaviour
{
    /// <summary>
    /// www請求
    /// </summary>
    /// <param name="_imageComp">image元件</param>
    /// <param name="_url">URL</param>
    public void GetImageByWWW(Image _imageComp, string _url)
    {
        StartCoroutine(WWWGetData(_imageComp, _url));
    }

    /// <summary>
    /// UnityWebRequest請求
    /// </summary>
    /// <param name="_imageComp">image元件</param>
    /// <param name="_url">URL</param>
    public void GetImageByUnityWebRequest(Image _imageComp, string _url)
    {
        StartCoroutine(UnityWebRequestGetData(_imageComp, _url));
    }


    IEnumerator WWWGetData(Image _imageComp, string _url)
    {
        using (WWW www = new WWW(_url))
        {
            yield return www;
            if (!string.IsNullOrEmpty(www.error)) Debug.Log(www.error);
            else
            {
                if (www.isDone)
                {
                    int width = 1920;
                    int height = 1080;
                    Texture2D texture2d = new Texture2D(width, height);
                    www.LoadImageIntoTexture(texture2d);
                    Sprite tempSprite = Sprite.Create(texture2d, new Rect(0, 0, width, height), new Vector2(0.5f, 0.5f));
                    _imageComp.sprite = tempSprite;
                }
            }
        }
    }


    IEnumerator UnityWebRequestGetData(Image _imageComp, string _url)
    {
        using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(_url)) 
        {
            yield return uwr.SendWebRequest();
            if (uwr.isHttpError || uwr.isNetworkError) Debug.Log(uwr.error);
            else
            {
                if (uwr.isDone)
                {
                    int width = 1920;
                    int height = 1080;
                    Texture2D texture2d = new Texture2D(width, height);
                    texture2d = DownloadHandlerTexture.GetContent(uwr);
                    Sprite tempSprite = Sprite.Create(texture2d, new Rect(0, 0, width, height), new Vector2(0.5f, 0.5f));
                    _imageComp.sprite = tempSprite;
                    Resources.UnloadUnusedAssets();
                }
            }
        }
    }
}