유니티/공통

유니티 - Resources를 활용해 에셋을 로드해보자

근본넘치는개발자 2024. 10. 18. 23:29

 

오늘은 Resources 폴더를 사용해

동적으로 에셋을 로드하는 법에 대해 알아보고자 합니다.

 

구현 문제를 연습하다가 정적으로 할당하는 방법 외

동적으로 시도를 해보라는 상황이 있었는데

처음 떠올랐던 방법이 GetComponent, find 였습니다. 

 

위 방식으로 어찌저찌 만들기는 했지만,

다른 방법들은 없었을까 고민하던 중 

이전에 Resource 폴더를 활용해 에셋을 불러왔던 방식이 떠올랐습니다.

 

당시에는 이런 게 있구나 하고 넘어갔었는데 지금 보니 다시 보이더군요.

언제 사용하는지 문제점은 없는지 정리가 필요할 거 같아 작성해 봤습니다.

 

 

원리를 설명하자면 

 

Resources라는 폴더를 만든 후,

그 안에 할당해 주고 싶은 내용들을 넣어주고

코드로 Resources 폴더에 접근,

타입과 이름으로 해당 내용을 찾아 할당해 주는 방식입니다 .

 

유니티 내 예약어로 Resources라는 이름 폴더에서만 동작합니다.

Resources라는 폴더가 여러개여도 전부 접근이 가능합니다.

 

사용 방법

 

먼저 Project 창에서 Resources라는 폴더를 만들어 줘야 합니다.  

 

 

 

설명을 위해 다음과 같은 스크립트와 에셋들을 작성하고 세팅했습니다.

 

 

 

 

 

 

인 게임 화면

 

TestMusic의 경우 Sound 폴더 안에 있으므로 경로를 적어주었습니다. 

폴더를 다르게 해도 정말 동작하는지 테스트해 봤습니다.

 

 

 

 

이렇게 폴더를 나눠 놓고 위의 코드 그대로 실행해 보니 정상 작동하더군요 .

 

 

단점 

Resources 안에 있는 내용들은 게임 시작 시 무조건 메모리에 적재가 된다.

= 게임 내 불필요한 메모리 소모를 일으킬 수 있다.

 

어플리케이션 시작 시간과 빌드 시간 증가

 

 

 

이러한 점 때문에 유니티에서는 Resources 폴더 보단

Addressables 시스템을 사용하는 것을 권장한다고 합니다.

 

Addressable 도 한번 스쳐 지나가듯 들어본 거 같은데 

결국 다 이어지네요. 재미있게. ㅎ

 

Resouce와 달리 에셋을 메모리에 할당했다가 메모리에서 사용하지 않을 때는

언로드하는 방식의 "에셋 번들" 이라는 기술도 있다고 합니다.

 

조만간 에셋 번들과 Addressable 내용도 공부하고 작성해 보도록 하겠습니다.

부족한 실력이라 쓸 내용이 넘치네요;;;

 

참고한(혹은 참고하면 좋을) 내용

 

https://youtu.be/Lgs7NqgF__s?si=DZwyNtiXdngNZg9g