🎮 Unity Study/Unity

[Unity] Url to Image (RawImage, UnityWebRequest, Couroutine, Action<Texture>)

ibelieveinme 2023. 8. 30. 23:29
728x90

이미지 Url 를 다운로드해서 이미지 Texture를 변경하는 법을 알아보자.

 

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

namespace Main {

    public class MainCard : MonoBehaviour 
    {
        [SerializeField] private TextMeshProUGUI titleText;
        [SerializeField] private TextMeshProUGUI contentText;
        [SerializeField] private TextMeshProUGUI dateText;
        [SerializeField] private RawImage thumbnail;

        public void SetMainCardData(MainData mainData)
        {
            titleText.text = mainData.stuPgrNo;
            contentText.text = mainData.stuActCont;
            dateText.text = mainData.regDt;

            StartCoroutine(DownloadImage(mainData.stuActFileUrl, (texture) => {
                thumbnail.texture = texture;
            }));
        }

        IEnumerator DownloadImage(string url, Action<Texture> callback)
        {
            UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
            yield return request.SendWebRequest();
            if(request.result == UnityWebRequest.Result.ConnectionError 
                || request.result == UnityWebRequest.Result.ProtocolError)
            {
                Debug.Log(request.error);
            }
            else
            {
                callback(((DownloadHandlerTexture)request.downloadHandler).texture);
            }
        }
    }
}

 

1. DownloadImage 코루틴 함수에서 UnityWebRequest 를 이용해서 Url 이미지의 Textrue 를 받아온다.

다운로드 및 Texture 변환 과정에 시간이 걸리므로 Couroutine, yield return 구문을 사용한 것.

 

2. RawImage에 적용하는 부분은 Action<Texture> 와 callback 을 이용한다.

texture를 정상적으로 완전히 받아온 후에 적용시키기 위해.


Image vs RawImage

 

Image는 Sprite를 표현한다. RawImage는 Texture를 표현한다.

Sprite는 Sprite.Create() 작업을 추가해야하고 이게 시간 및 메모리 비용이 많이 든다.

반면 Texture를 바로 사용하는건 시간과 메모리를 아낄 수 있지만 Draw Call을 야기한다.

상황에 따라 선택하자!

https://docs.unity3d.com/kr/2018.4/Manual/script-RawImage.html

 

로우 이미지 - Unity 매뉴얼

로우 이미지(Raw Image) 컨트롤은 사용자에게 상호작용하지 않는 이미지를 표시합니다. 장식, 아이콘 등에 사용할 수 있으며, 스크립트를 통해 다른 컨트롤 변경점을 반영하도록, 이미지를 변화시

docs.unity3d.com

 

728x90