Total: Today: Yesterday:
개발/Unity | 2020. 6. 10. 12:10 | Posted by 자수씨

컨텐츠 업데이트 워크플로우 (Content update workflow)

유니티는 게임 컨텐츠를 두 가지 범주로 구성하는 것을 권장한다.

  • Cannot Change Post Release: 업데이트 하지 않을 것으로 예상되는 정적 컨텐츠
  • Can Change Post Release: 업데이트 될 수 있는 동적 컨텐츠

이 구조에서 Cannot Change Post Release 로 지정된 컨텐츠는 애플리케이션과 함께 제공(설치 즉시 다운로드되어 로드되거나) 되고 매우 작은 번들에 상주한다. Can Change Post Release 로 지정된 컨텐츠는 각 업데이트에 필요한 데이터 양을 최소화하기 위해 작은 번들에 온라인으로 상주한다. 어드레서블 에셋 시스템의 목표 중 하나는 스크립트를 변경하지 않고도 이 구조를 쉽게 작업하고 변경할 수 있도록 하는 것이다.

 

작동 원리 (How it works)

어드레서블은 컨텐츠 카탈로그를 사용하여 로드하는 위치와 방법을 지정하여 각 에셋의 주소를 매핑한다. 앱에 매핑이 변경되는 기능을 제공하려면 원본 앱이 카탈로그의 온라인 사본을 알고 있어야 한다. 이러한 설정을 하기 위해서는 AddressableAssetSettings 인스펙터에서 Build Remote Catalog 설정을 활성화해야 한다. 이를 통해 카탈로그 사본이 지정된 경로에 빌드되어 로드되는 것을 보장한다. 앱이 제공된 이후에는 이 로드 경로를 변경할 수 없다. 컨텐츠 업데이트 프로세스는 파일 이름이 동일한 카탈로그의 새 버전을 작성하여 이전에 지정된 로드 경로에서 파일을 겹쳐 쓴다.

애플리케이션을 빌드하면 고유한 앱 컨텐츠 버전 문자열이 생성되어 각 앱이 로드해야 하는 컨텐츠 카탈로그를 식별한다. 서버는 충돌없이 여러 버전의 앱 카탈로그가 포함될 수 있다. 필요한 데이터는 addressables_content_state.bin 파일에 저장된다. 여기에는 Cannot Change Post Release 로 지정된 그룹에 포함된 모든 에셋에 대한 새시 정보와 함께 버전 문자열이 저장된다. 기본적으로 프로젝트 디렉토리의 Assets/AddressableAssetsData/\<platform\> 에 위치한다.

addressables_content_state.bin 파일에는 어드레서블 시스템의 모든 Cannot Change Post Release 에셋 그룹에 대한 해시 및 종속성 정보가 포함되어 있다. StreamingAssets 폴더에 빌드된 모든 그룹은 Cannot Change Post Release 로 지정되어야 하지만 대규모 원격 그룹도 이러한 지정에 이점을 가질 수 있다. 다음 단계 (아래에 설명된 컨텐츠 업데이트 준비)에서 이 해시 정보는 Cannot Change Post Release 그룹에 변경된 자산이 포함되어 있는지 여부를 결정하므로 해당 에셋을 다른 곳으로 이동해야 한다.

 

고유 번들 ID (Unique Bundle IDs)

에셋 번들을 메모리에 로드할 때 유니티는 동일한 내부 이름으로 두 개의 번들을 로드할 수 없도록 강제한다. 이로 인해 런타임 시 번들 업데이트에 제한이 있을 수 있다. 현재 어드레서블은 초기화 외부에서 카탈로그 업데이트를 지원하므로 이미 로드된 컨텐츠를 업데이트 할 수 있다.

이 작업을 수행하려면 두 가지 중 하나가 발생해야 한다. 한 가지 옵션은 카탈로그를 업데이트하기 전에 모든 어드레서블 컨텐츠를 언로드하는 것이다. 두 번째 옵션은 업데이트 된 에셋번들에 고유한 내부 식별자가 있는지 확인하는 것이다. 이를 통해 새 번들을 로드할 수 있으며 이전 번들은 여전히 메모리에 있게 된다. 두 번째 옵션을 활성화하는 옵션은 AddressableAssetSettings 인스펙터에서 "Unique Bundle IDs" 를 켜는 것이다. 이 옵션의 단점은 번들을 종속성 체인으로 재구성해야 한다는 것이다. 한 그룹에서 매터리얼을 변경한 경우 기본적으로 매터리얼 번들만 다시 작성하면 되지만 "Unique Bundle IDs" 옵션이 활성화되면 해당 매터리얼을 참조하는 모든 에셋을 리빌딩해야 한다.

 

컨텐츠 업데이트 준비 (Preparing for content updates)

Cannot Change Post Release 그룹에서 에셋을 수정한 경우 Check for Content Update Restrictions 명령을 실행해야 한다. 이 명령을 통해 수정된 에셋이 Cannot Change Post Release 그룹에서 제거되어 새 그룹으로 이동한다. 새 에셋 그룹을 생성하려면 아래와 같다.

  1. 유니티 에디터에서 Addressable Groups window 를 연다. (Window > Asset Management > Addressables > Groups)
  2. Addressable Groups window 에서 메뉴바의 Tools > Check for Content Update Restrictions 를 선택한다.
  3. 빌드 데이터 파일 (Build Data File) 다이얼로그 팝업이 열리면 addressable_content_state.bin 파일을 선택한다.

이 데이터는 애플리케이션이 마지막으로 빌드 된 이후 수정된 에셋 또는 종속성을 결정하는데 사용된다. 시스템은 컨텐츠 업데이트 빌드를 준비하기 위해 이러한 에셋을 새 그룹으로 옮긴다.

참고: 이 명령은 모든 변경 사항이 Can Change Post Release 그룹으로 제한된 경우 아무 작업도 수행하지 않는다.

중요: 준비 작업을 실행하기 전에 버전 관리 시스템을 분기하는 것이 좋다. 준비 작업은 컨텐츠 업데이트에 적합한 방식으로 에셋 그룹을 재정렬한다. 분기는 다음에 새 플레이어의 제공 시점에 원하는 컨텐츠 배열로 돌아갈 수 있도록 한다.