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
728x90
'🎮 Unity Study > Unity' 카테고리의 다른 글
Android API version 별 SDK 버전(feat. Unity 버전 별 NDK, JDK Version) (0) | 2023.11.29 |
---|---|
[Unity] Custom Unity Package in Git 맹들기 (0) | 2023.09.22 |
[Unity] Json 로컬 데이터 불러오기 (0) | 2023.08.24 |
[Unity] 병목현상과 메모리 관리 (0) | 2023.08.22 |
[Unity] Garbage Collector (0) | 2023.08.21 |