유니티 5 에셋번들 시스템은 이전 버전의 에셋번들 시스템과는 별개로 새롭게 제작되었습니다. 이미 5 버전이 출시된 지났기 때문에 이미 접해보신 분들도 많으실 것입니다. 어쨋든 새로운 에셋번들 시스템은 이전 시스템의 단점들을 보완하는 '좋은' 방향으로 개선되었습니다.


 유니티 5 새로운 에셋번들 시스템에 대해서 가장 설명되어 있는 곳은 아래 링크의 유니티 포럼 글입니다. (실제 에셋번들 시스템 개발자가 글을 썼습니다.)

 http://forum.unity3d.com/threads/new-assetbundle-build-system-in-unity-5-0.293975/

내용은 영문이지만, 이미 에셋번들에 관한 기반지식을 가지고 계신 분들은 내용을 쉽게 파악하실 있을 것입니다. 또한, 해당 링크에는 유용한 demo프로젝트 제공하므로 드시 다운로드하여 살펴보길 권장드립니다.


 만약 에셋번들(AssetBundle) 대한 기초 지식과 개념이 없으신 분들은 아래 링크부터 시작하는 메뉴얼부터 참조하시길 바랍니다.

 http://docs.unity3d.com/kr/current/Manual/AssetBundlesIntro.html

  가지 유의할 점은 에셋번들 시스템과 이전 버전의 에셋번들 시스템과는 혼용해서 사용해서는 안된다는 것입니다. 반드시 기억하시기 바랍니다.


 앞서 언급한 유니티 포럼의 에셋번들 시스템 설명 내용에 중요한 부분만 아주 간단히 언급해 보겠습니다.


에셋번들 시스템의 개선

유니티 5 에셋번들 시스템에서는 이전 버전에서의 불편했던 점을 개선했습니다. 


1. 이상 복잡한 '빌드 스크립트' 필요 없습니다. 단순히 BuildPipeline.BuildAssetBundles 함수 호출로 에셋번들을 빌드할 있습니다.


2. 유니티가 에셋번들의 의존성을 다루기 때문에, 이전 버전에서와 같이 사용자가 직접  PushAssetDependencies/PopAssetDependencies 이용하여 의존성을 다루지 않아도 됩니다.


3. 증분빌드 체크를 하기 때문에, 실제로 변경된 에셋번들에 대해서만 다시 빌드하게 됩니다.


4. '의존성' 묶인 모든 에셋번들을 리빌드할 필요가 없습니다. 예전에는 의존성 때문에 매번 의존성을 가지는 에셋들을 모두 다시 빌드하는 수고를 감수해야 했습니다. 5 버전부터는, 내부적으로 의존성을 가지는 오브젝트를 저장하는 방법을 변경하였으므로, 의존성에 관련된 모든 에셋번들을 다시 빌드하지 않아도 됩니다.



새로운 것들

1. 새로운 에셋번들을 위한 UI 

 예전과 같으면, 에셋번들로 제작한 에셋을 대한 테스트를 하려면 직접 매번 빌드해야 했으나, 이제는 그럴 필요가 없어졌습니다. 유니티 5에서는 어떤 에셋을 에셋번들 이름으로 마킹할 있는 UI 있습니다. UI 통해서 에셋과 에셋번들 간의 매핑 설정을 하게 됩니다. 이렇게 맵핑된 정보는 에셋데이터베이스(AssetDatabase) 저장됩니다. 이를 통해서 직접 별도의 빌드과정 없이도, 에디터를 통해서 각각의 에셋들을 에셋번들로 매핑한 상태에서 시뮬레이션을 해볼 있게 됩니다.


2. 매니페스트 파일

 에셋번들을 빌드하게 되면, 에셋번들 파일 외에 에셋번들에 대한 매니페스트 파일이 생성됩니다. 매니페스트 파일에는 CRC, 에셋파일 해쉬, 타입트리 해쉬, 클래스 타입, 그리고 의존관계인 에셋번들 이름 정보들이 포함되어 있습니다.  앞서 언급했던 증분빌드를 위해 유니티는 파일의 정보를 이용합니다. 뿐만 아니라 사용자는 매니페스트 파일을 통해서 해당 에셋번들의 정보를 쉽게 들여다 있다는 점도 매우 유용합니다.

 각각의 에셋번들에 대한 매니페스트 외에 전체를 위한 싱글 매니페스트 파일도 생성됩니다. 에셋번들의 수와 관계없이 하나만 생성되며, 파일에는 모든 에셋번들과 모든 의존성을 담고 있습니다. 파일은 에셋번들 로딩 매우 유용하게 사용됩니다.


3. 에셋번들 배리언트(variant)

 유니티 5에서는 에셋번들 배리언트를 설정하는 기능이 추가되었습니다. 동일한 에셋에 대해서 별도 이형(異形) 세팅하여서, 실시간으로 교체하거나 있도록 것입니다. 이것은 보통 디바이스 사양 또는 유저 선택에 따른 그래픽 품질 설정 , 고품질과 저품질 씬의 선택적 로드 실시간 스위칭이 필요한 경우에 아마도 유용할 것입니다.     


Posted by 흑 기사

댓글을 달아 주세요

  1. 흑 기사 2015.09.16 14:59 신고  댓글주소  수정/삭제  댓글쓰기

    현재 Sprite Packer에 의해 팩킹된 아틀라스 텍스처를 함께 참조하는 오브젝트를 각각 서로 다른 애셋번들로 빌드하면 이슈가 발생하니 유의해야 하겠습니다.
    다시 말하면, 동일한 팩킹된 아틀라스 텍스처를 사용하는 프리팹을 각각의 에셋번들로 빌드하게 되면, 각각 에셋번들에 해당 아틀라스 텍스처가 모두 복사되어 버리는 이슈가 발생합니다. 따라서 실제 로딩하여 렌더링 시, 중복된 아틀라스 텍스처들이 메모리에 올라가는 현상이 발생합니다.
    현재 참조해야 할 팩킹된 아틀라스 텍스처를 별도 에셋번들로 빌드할 수 있는 환경이 없으므로, 현 시점에서는 특정 태그를 통해 팩킹된 아틀라스 텍스처를 참조하는 프리팹을 복수 에셋번들로 빌드하는 상황을 피할 수 밖에 없습니다.