본문 바로가기
유니티 Unity/유니티 기능 구현

[유니티] 서버(인터넷)에서 이미지 가져와서 사용하는 방법

by TODAYCODE 2022. 1. 4.
반응형

유니티에서 이미지를 사용하기 위해서는 그냥 단순하게 프로젝트탭에 이미지를 집어넣어도 되지만,

간혹 인터넷에서 이미지를 가져와야할 때가 있다.

이유는 다양하겠지만, 이미지나 동영상 따위를 유니티에 포함하지 않고 플레이 할 때마다 서버에서 가져온다면

프로젝트를 빌드할 때 그만큼 용량이 가벼워지는 장점이 있다.

그리고 개인서버가 필요한 것도 아니고 그냥 인터넷에 존재하는 사진이라면 가져올 수 있기때문에 손쉽기도 하다.

물론 인터넷이 필요하고 매번 실행할 때마다 이미지를 가져와야한다는 점은 단점이겠지만.

 

당연히 인터넷에서 이미지를 가져오므로 서버통신이 필수적이다.

만약 UnityWebRequest 를 사용해본적이 없다면, 이전 글들을 한번 간단히 살펴보고오면 도움이 된다.

 

유니티 HTTP 통신 구현 핵심 정리3 - UnityWebRequest 방식 GET/POST

드디어 실제로 실무에서 많이 쓰이는 UnityWebRequest 방식을 활용한 HTTP 통신을 알아보자. 그 전에, HTTP 통신에 대한 기본적인 내용과 WWW 클래스를 통한 통신이 궁금하다면 이전글들을 확인해보면

coding-of-today.tistory.com

 


1. 프로젝트 생성 및 준비

첫번째로 간단하게 실습을 위해서 유니티 프로젝트를 만들어준다.

RawImage를 하나 생성해서 중앙에 잘 보이게 배치해준다.

그리고 스크립트를 하나 생성해서 캔버스든 어디든 하이어라키에 존재하는 놈에 붙여주자.

 

2. 스크립트 작성

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

public class Test : MonoBehaviour
{
    public RawImage img;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(GetTexture(img));
    }

    IEnumerator GetTexture(RawImage img)
    {
        var url = $"이미지 주소";
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
        yield return www.SendWebRequest();
        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.Log(www.error);
        }
        else
        {
            img.texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
        }
    }
}

스크립트에 위와같이 적어준다.

간단히 설명을 하자면, UnityWebRequest에는 텍스쳐를 가져오는 UnityWebRequestTexture라는게 별도로 존재하고

여기에 내장되어있는 GetTexture라는 걸 사용해서 인터넷으로부터 이미지를 가져올 수 있다.

매개변수로 url을 넣어줘야하는데 이미지가 존재하는 주소를 넣어주면 된다.

yield return을 사용해서 응답이 완료될때까지 기다린 후에 아까 만들었던 rawimage에다가 받아온 텍스쳐를 넣어주면 된다.

그럼 이제 남은 것은 url을 넣어주는 것 뿐이다.

 

3. 이미지 url 긁어오기

그냥 간단하게 네이버에 검색한 후에 마음에 드는 이미지에서 우클릭 후 새탭에서 열기를 눌러주면 다음과 같이 사진만 존재하는 창이 뜨게된다.

그럼 여기에서 주소창에 있는 주소를 아까전 코드의 url부분에 넣어주면 된다.

맨처음에는 구글에서 이미지 검색으로 했었는데 구글 이미지에서는 이런 방식으로는 url을 바로 얻을 수는 없었다.

뭐.. url 얻는 방법은 다양하니까 각자 알아서 하면 될것이고 새탭열기가 가장 간편하긴 한데 구글은 안된다..

아무튼 url을 얻어서 스크립트에 넣어줬다면 이제 잘 받아와지는지 확인하면 된다.

 

4. 결과 확인

플레이를 누르면 rawimage에 아이유 이미지가 들어간 것을 확인할 수 있다.

해당 이미지는 유니티 상에 존재하는 것이 아니라 서버에서 가져온 것이기 때문에 rawimage의 인스펙터창을 보면,

이렇게 텍스쳐 부분이 이미지만 존재하고 어떤 이름도 존재하지 않는 것을 볼 수 있다.

 


이미지나 동영상이 생각보다 용량이 굉장히 큰 경우가 많은데

이렇게 서버를 이용해서 받아온다면, 프로젝트의 용량을 꽤나 많이 줄일 수 있다.

다음번에는 동영상 스트리밍으로 가져오기, 사진 크기 최적화하기, 동영상이나 이미지를 서버에서 가져와서 저장하기 등 비슷하지만 조금씩 더 심화된 내용들을 포스팅 해보도록 하겠다.

 

 

반응형

댓글