유니티 Resources 폴더 – 번역

유니티 Resources 폴더 (The Resources folder)

원문 링크

 

이번 장(Chapter)은 유니티5에서의 애셋, Resources 시스템, 리소스관리에 대한 세번째 시리즈입니다.

이 장에서는 Resources 시스템에 대해서 살펴봅니다.
이 시스템은, 개발자가 하나 이상의 Resources라는 이름의 폴더에 애셋(Asset)을 저장하고 Resources API를 이용해서 오브젝트를 로드하거나 해제할 수 있는 기능을 제공하는 시스템입니다.

 

2.1 Resources 시스템에 대한 모범 사례 (Best Practices for the Resources System)

사용하지 마세요.

이렇게 강력하게 사용하지 말 것을 권장하는 데에는 여러가지 이유가 있습니다.

  • Resources 폴더를 사용하면 매끄러운 메모리 관리가 어렵습니다.
  • 잘못된 Resources 폴더의 사용으로 인해서 프로그램의 시작시간과 빌드시간이 길어질 수 있습니다
    – Resources 폴더의 수가 증가하면, 이 폴더에 있는 애셋(Asset)을 관리하는 것이 매우 어려워집니다.
  • Resources 시스템은 특정 플랫폼에서 사용자 지정 콘텐츠를 제공하는 프로젝트의 기능을 저하시키고, 콘텐츠를 점차 업그레이드할 수 있는 가능성을 없애버립니다.
    – 애셋번들(AssetBundle)을 활용하면, 유니티에서 장치 별로 콘텐츠를 대응할 수 있습니다.

 

2.2 Resources 시스템의 올바른 사용법 (Proper uses of the Resources system)

Resources 시스템이 개발을 저해하지 않고 도움이 될 수 있는 구체적인 두 가지 경우가 있습니다.

1. Resources는 사용이 쉽고 간단하기 때문에 빠르게 프로토타이핑을 하거나 실험을 하기에 매우 훌륭한 시스템입니다.
하지만, 프로젝트가 프로토타이핑 단계를 넘어서 개발단계로 들어가면, Resources 폴더를 사용하지 않는 것이 좋습니다.

2. Resources 폴더는 다음의 조건이 모두 만족하는 경우에도 유용합니다.

  • Resources 폴더에 저장된 콘텐츠가 메모리-집약적(memory-intense)이지 않은 경우
  • Resources 폴더에 저장된 콘텐츠가 프로젝트가 실행되는 동안에 전반적으로 사용되는 경우
  • Resources 폴더에 저장된 콘텐츠가 패치가 거의 필요하지 않는 경우
  • Resources 폴더에 저장된 콘텐츠가 플랫폼이나 장치에 따라 다르지 않은 경우

두번째 경우의 예로 전역적으로 사용되는 프리팹이 싱글톤(Singleton) MonoBehaviour를 포함하는 경우나 Facebook App ID와 같은 서드파티(third-party) 데이터를 포함하는 애셋(Asset)의 경우를 예로들 수 있습니다.

 

 

2.3 Resources의 직렬화 (Serialization of Resources)

“Resources”라는 이름의 폴더안에 있는 애셋(Asset)과 오브젝트(Object)는 프로젝트가 빌드될 때 직렬화되어 하나의 파일로 합쳐집니다.
이 파일에는 애셋번들(AssetBundle)과 비슷하게 메타데이터(metadata)와 색인정보(indexing information)도 포함됩니다. 이 색인정보에는 지정된 오브젝트의 이름을 적절한 File GUID와 Local ID로 변환할 수 있는 직렬화된 검색트리가 포함됩니다.
또한 이 색인정보는 직렬화된 파일의 특정 바이트 오프셋(offset)에서 해당 오브젝트의 위치를 찾는데 사용됩니다.

색인 데이터 구조는(대부분의 플랫폼에서) 균형 탐색 트리(balanced search tree)[1]이기 때문에, 생성시간이 O(N log(N))비율로 하며, 여기에서 N은 트리 내에서 색인된 오브젝트의 수를 의미합니다. 또한 이 증가로 인해서, Resources 폴더 안의 오브젝트가 증가함에 따라서 색인정보의 로딩시간이 증가합니다. (선형적으로 증가하는 시간보다 더 많은 시간이 증가합니다.)

이 작업은 건너뛸 수 없는 작업이며, 프로그램이 시작되고 첫 스플래시 스크린(splash screen)이 화면에 나타나는 동안에 발생합니다.
프로그램의 첫번째 씬에서 Resources 폴더 안에 포함된 대부분의 오브젝트를 거의 사용하지않는 경우에도, 10,000개의 애셋(Asset)을 가진 Resources 시스템을 초기화하게되면, 로우엔드(low-end) 장치에서 몇초 간의 시간을 소비하는 것으로 확인되었습니다.

 

각주 (Footnotes)
1. 대부분의 플랫폼에서는, C++ 표준 템플릿 라이브러리의 std::multimap 입니다.

 

내용 끝까지 읽어주셔서 감사합니다.
배너 클릭은 저에게 많은 힘이 됩니다.
감사합니다 🙂

 

RonnieJ

프리랜서 IT강사로 활동하고 있습니다. 게임 개발, 웹 개발, 1인 기업, 독서, 책쓰기에 관심이 많습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다