Unity

Unity Addressable을 활용하여 이미지 로드하기

5_솔방울 2023. 1. 11.

Addressable은  Unity 에디터 및 런타임 에셋 관리 시스템으로, 게임을 출시할 때를 대비하여 에셋을 유동적으로 바꿀 수 있도록, 에셋들에 주소(address)를 대입하여(약한 참조) 에셋을 관리할 때 불필요한 로드를 방지한다.

장점

런타임 메모리를 개선할 수 있다.

참조된 에셋이 메모리 내부 및 외부에 로드되는 시점을 제어할 수 있다.

 

사용예시

addressable을 활용하여 이미지를 로드해 띄우는 법을 알아보자.

우선, Package Manager에서 Addressables를 다운로드한다.

window -> package manager 에서 찾을 수 있다.

그리고 불러오고자 하는 이미지의 Addressable에 체크한다.

(식별이 편하도록 이름을 바꾸어주어도 기능상 상 문제되지 않는다)

이미지 뿐 만이 아니라, 오디오 소스, 프리펩, 씬 등도 지정 가능하다.

소스코드

그리고 코드를 작성해 준다. 받아오는 과정을 비동기로 진행해 주기 위하여 handle을 사용하며, Image를 불러오는 게 목적이기 때문에 RequireComponent로 Image 컴포넌트가 붙어 있어야만 스크립트가 붙도록 해준다.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

[RequireComponent(typeof(Image))]
public class LoadImageWithAddress : MonoBehaviour
{
    //에디터에서 정의함
    public string address;
    private Image image;
    private AsyncOperationHandle<Sprite> handle;

    private void Start()
    {
        image = GetComponent<Image>();
        handle = Addressables.LoadAssetAsync<Sprite>(address);
        handle.Completed += HandleCompleted;
    }
    private void HandleCompleted(AsyncOperationHandle<Sprite> operation)
    {
        if (operation.Status == AsyncOperationStatus.Succeeded)
        {
            image.sprite = operation.Result as Sprite;
            image.SetNativeSize();
        }
        else
        {
            Debug.LogError($"AssetReference {address} failed to load.");
        }
    }

    private void OnDestroy()
    {
        Addressables.Release(handle);
    }
}

그 후, Image 컴포넌트가 붙은 오브젝트에 스크립트를 넣어주고, 불러오고자 하는 주소를 써준다.

이렇게 넣어주면 된다.

그러면 정상적으로 적용된다!

'Unity' 카테고리의 다른 글

Unity Json으로 저장, 로드하는 법  (0) 2023.01.04
유니티 C# 버튼 가려짐 해결  (0) 2022.11.21

댓글