Unity 검색

공유

어드레서블(Addressables)은 복잡한 라이브 콘텐츠를 전달해야 하는 대규모 제작팀의 요구사항을 보다 효과적으로 지원하기 위한 Unity 에디터 및 런타임 에셋 관리 시스템입니다. 이번 릴리스를 통해 개발자의 수고를 크게 덜 수 있게 되었으며, 엔지니어링 문제를 자체적으로 해결할 만한 여건을 갖추지 않은 소규모 팀도 라이브 콘텐츠를 사용할 수 있게 됩니다. 어드레서블은 이제 프리뷰 단계를 마치고 검증이 완료된 정식 패키지로 Unity 2019.3에 포함되며, Unity 2018 LTS 릴리스에서도 지원됩니다.

배경

에셋 번들은 런타임 시 동적 로딩을 위해 에셋을 개별 단위로 구성하는 로우레벨 방식으로 Unity 4에 도입되었습니다. 에셋 번들을 구현하면 개발자가 앱 설치 시 콘텐츠를 분리할 수 있어 라이브 앱에 정기적인 콘텐츠 업데이트를 제공할 때 초기 다운로드 크기를 작게 유지할 수 있으며, 앱 콘텐츠가 추가되더라도 무선 전송 규정(over-the-air) 한도를 넘어서지 않게 됩니다.

하지만 이러한 이점에도 불구하고, 실제 제작 시 에셋 번들을 활용하는 것이 간단한 일은 아닙니다. 씬과 게임 오브젝트의 공용 필드에서 직접 참조하여 에셋을 로드하고 참조하는 간단한 방식에서 에셋 번들로 콘텐츠를 전환하기 위한 명확한 워크플로가 Unity에 없기 때문에, 앱이나 게임을 정적인 빌트인 콘텐츠를 사용하던 방식에서 증분 업데이트를 통해 동적으로 콘텐츠를 로드하는 방식으로 전환하려면 많은 리팩터링과 커스텀 프로그래밍이 필요합니다. 그래서 많은 개발자가 이 기능을 사용하지 않고 있습니다.

어드레서블

에셋 번들을 사용해 본 개발자에게 의견을 물어본 결과, 에셋 번들을 성공적으로 활용하고 있는 대부분의 개발자가 동일한 고수준 시스템을 서로 조금씩 다른 수많은 방식으로 작성하고 있다는 사실을 알게 되었습니다. 그리하여 에셋의 위치 지정, 빌드 및 로드와 관련하여 일반적으로 발생하는 몇 가지 문제를 해결하기 위한 프레임워크를 구축하기 위해 어드레서블이 탄생하게 되었습니다.

에셋 참조와 패키징의 분리

어드레서블의 주된 기능은 로드할 대상이 되는 에셋과 에셋이 로드되는 위치방식을 분리하는 것입니다. 씬, 프리팹, 텍스트 에셋을 비롯한 모든 에셋을 어드레서블(위치 지정 가능)로 표시하고 고유한 이름을 부여할 수 있습니다. 위치 지정이 가능한 에셋은 코드 내의  위치 지정 가능한 이름과 특수한 에셋 레퍼런스 스크립트 유형을 통해 참조 및 로드가 가능합니다. 이와 별개로, 어드레서블 에셋을 함께 그룹화하여 빌트인 콘텐츠로 빌드하고 로드하거나 런타임 시 동적으로 로드하기 위한 번들로 통합할 수 있습니다. 이러한 분리를 통해, 게임 코드를 변경하지 않고도 제작 최종 단계에 콘텐츠 패키징과 배포에 대한 의사 결정을 할 수 있습니다.

어드레서블 창

런타임 메모리 관리

Unity의 에셋 번들에서 로드 시 얻게 되는 주된 이점은 더 이상 필요하지 않은 콘텐츠를 메모리에서 효율적으로 언로드할 수 있다는 점입니다. 이전에는 로드한 것과 안전하게 언로드할 수 있는 것을 효과적으로 추적하기 위해 개발자가 복잡한 코딩 작업을 수행해야 했습니다. 하지만 어드레서블을 통해 로드하면 로드된 에셋과 이들의 종속성에 대해 개략적인 참조 횟수가 자동으로 계산되므로 더 이상 사용하지 않는 번들과 관련 에셋을 자동으로 언로드할 수 있습니다. 또한 어드레서블은 로드된 에셋과 에셋 번들 참조 횟수를 실시간으로 디버깅하기 위한 시각적 프로파일러도 제공합니다.

어드레서블 프로파일러

더욱 빠른 반복 작업

어드레서블은 에셋 로드 프로세스에 대한 몇 가지 핵심적인 추상화 기능을 제공하여 콘텐츠 변경 시 바로 확인할 수 있으므로 반복 작업을 더욱 빠르게 수행할 수 있습니다.

  • 플레이 모드 시뮬레이션: 에셋을 빌드하지 않고도 디스크에서 직접 로드하며, 동시에 프로파일러를 통해 에셋 참조 횟수를 디버깅할 수 있습니다.
  • 빠른 증분 빌드: 어드레서블에는 증분 빌드의 속도와 안정성을 향상시키는 새로운 스크립터블 빌드 파이프라인(Scriptable Build Pipeline)이 함께 제공됩니다.
  • 에디터 호스팅 서비스: 로컬에 어드레서블 콘텐츠를 서비스하기 위한 빌트인 기능, LAN에 연결된 기기들이 로컬 기기상에서 빠르고 편리하게 콘텐츠에 대한 반복 작업을 수행할 수 있는 방법을 제공합니다.

시작하기

어드레서블은 에셋의 참조 및 패키징 문제를 분리하고, 플레이 모드 및 배포된 플레이어 빌드에서 반복 작업을 더욱 빠르게 수행할 수 있게 해주며, 자동 메모리 관리 및 프로파일링 툴을 제공합니다. 이를 통해 콘텐츠의 복잡도에 상관없이 모든 사용 사례에 적용할 수 있도록 확장하고 커스터마이즈할 수 있습니다.

유니티는 어드레서블이 프리뷰 단계를 마치고 제작이 완료된 앱에서 안정적으로 사용 가능하도록 지원하게 된 것으로 만족하지 않고 지속적으로 성능과 기능을 개선할 것이며, Unity의 개선과 더불어 개발자의 요구사항을 충족해 나갈 것입니다.

어드레서블을 통해 동적 콘텐츠를 지원하기 위한 핵심적인 기술 문제가 상당 부분 해결되었지만, 에셋을 호스팅하고 제작을 마친 게임과 앱에 실시간으로 에셋을 제공해야 하는 ‘마지막’ 문제가 여전히 남아 있습니다. 올해 내에 어드레서블 시스템에 완전히 통합된 엔터프라이즈용 글로벌 콘텐츠 호스팅 솔루션을 출시할 예정입니다. 이 서비스에 대한 자세한 내용은 여기에서 요청하실 수 있습니다.

이미 300여 개 프로젝트에서 어드레서블을 사용하고 있습니다. 지금 바로 Unity의 패키지 관리자를 통해 어드레서블을 다운로드하여 프로젝트에서 사용해 보세요. 새로운 프로젝트에서 간편하게 시작하거나, 마이그레이션 가이드에 따라 기존 프로젝트를 업그레이드하여 어드레서블을 활용할 수 있습니다.  또한 GitHub에서 기본 및 고급 사용자를 위한 예제 프로젝트를 제공합니다.

2019년 7월 15일 게임 | 5 분 소요