Version: 2021.1
언어: 한국어
APK 확장 파일(OBB) 지원(Support for APK expansion files (OBB))
빠른 개발 반복을 위한 앱 패치

Play Asset Delivery

Play Asset Delivery(PAD)는 150Mb보다 큰 애플리케이션을 전송하기 위해 사용할 수 있는 Google Play Store 기능입니다. APK 확장 파일(OBB)을 사용하여 텍스처, 사운드, 메시와 같은 추가 에셋을 저장하는 대신 PAD는 에셋 팩을 사용합니다. Google은 Google Play에서 에셋 팩을 호스팅하고 제공하므로 애플리케이션 리소스를 사용자에게 보내기 위해 콘텐츠 전송 네트워크를 만들 필요가 없습니다. PAD에 대한 자세한 내용은 Android의 Play Asset Delivery를 참조하십시오.

중요: PAD는 Google Play Store에서만 사용할 수 있습니다. 대용량 애플리케이션이 있고 다른 디지털 배포 서비스를 지원하고자 하는 경우 APK 확장 파일(OBB)을 사용해야 합니다.

Play Asset Delivery 사용

Play Asset Delivery를 사용하려면 Android 앱 번들을 빌드하고 애플리케이션 바이너리를 분할하기 위해 프로젝트를 설정해야 합니다.

Android 앱 번들을 빌드하려면 Unity를 다음과 같이 설정하십시오.

  1. 빌드 설정을 엽니다(메뉴: File > Build Settings).
  2. Platform에서 Android를 선택합니다.
  3. Export Project가 활성화되어 있는 경우 Export for App Bundle을 활성화합니다. 그렇지 않은 경우 Build App Bundle (Google Play)를 활성화합니다.

애플리케이션 바이너리를 분할하려면 Unity를 다음과 같이 설정하십시오.

  1. 플레이어 설정을 엽니다(메뉴: Edit > Project Settings에서 Player 선택).
  2. Android 설정 탭을 선택하고 Publishing Settings 섹션을 엽니다.
  3. Split Application Binary를 활성화합니다.

이제 애플리케이션을 빌드하면 Unity는 기본 모듈과 에셋 팩으로 분할된 애플리케이션을 포함하는 Android 앱 번들을 생성합니다.

  • 기본 모듈: 첫 번째 씬에서 실행 가능 파일(Java와 네이티브), 플러그인, 스크립트, 에셋을 포함합니다. 첫 번째 씬은 빌드 인덱스가 0인 씬입니다.
  • 에셋 팩: 나머지 씬, 리서스, 스트리밍 에셋을 포함하여 모든 것을 포함합니다. 빌드 시 Unity가 생성하는 에셋 팩에 대한 자세한 내용은 생성된 에셋 팩을 참조하십시오.

Unity가 자동으로 생성한 에셋 팩을 따라 자체 커스텀 에셋 팩도 만들 수 있습니다. 이는 에셋 팩에 포함된 사항을 제어해야 할 때 유용합니다. Unity는 커스텀 에셋 팩을 최종 Android 앱 번들에 추가합니다. 커스텀 에셋 팩과 설정하는 방법에 대한 자세한 내용은 커스텀 에셋 팩을 참조하십시오.

생성된 에셋 팩

에셋 팩에는 다운로드 크기 제한이 있습니다. 이를 고려하기 위해 Unity는 추가 에셋 크기에 따라 에셋 팩이 생성되는 방법을 다음과 같이 변경합니다.

  • 추가 에셋이 스토리지를 1GB보다 더 적게 차지하는 경우 Unity는 모든 것을 install-time 전송 모드를 사용하여 단일 에셋 팩으로 패킹합니다. 어떤 커스텀 에셋 팩도 만들지 않는 경우는 기기가 에셋 팩을 애플리케이션 설치의 일환으로 다운로드하고 사용자가 처음 애플리케이션을 실행할 때 모든 에셋을 사용할 수 있다는 의미입니다.
  • 추가 에셋이 스토리지를 1GB보다 더 많이 차지하는 경우 Unity는 스트리밍 에셋을 하나의 에셋 팩으로 패킹하고 모든 다른 추가 에셋은 다른 에셋 팩에 패킹합니다. Unity는 install-time 전송 모드를 용량이 더 큰 에셋 팩에 할당하고 fast-follow 전송 모드는 용량이 더 작은 에셋 팩에 할당합니다.

참고: 이 에셋 팩 중 하나가 Google Play Store가 허용한 업로드 제한 용량을 초과하는 경우 Unity는 경고를 표시하지만 빌드를 중단하지는 않습니다. 또한 Unity는 에셋 팩 크기를 개별적으로 확인하며 커스텀 에셋 팩에 대한 크기 확인은 수행하지 않습니다. 즉 커스텀 에셋 팩과 Unity가 생성한 에셋 팩의 조합이 Google Play Store에 너무 커도 Unity는 경고나 오류를 표시하지 않습니다.

Unity가 자동으로 생성한 에셋 팩의 경우 Unity는 전송 모드 변경을 지원하지 않습니다. 에셋 팩에 대한 전송 모드를 변경하고자 하는 경우 에셋으로 커스텀 에셋 팩을 생성해야 합니다.

런타임 시 에셋 팩 관리

Unity는 런타임 시 에셋 팩을 관리하는 API를 제공합니다. API는 Google의 PlayCore API를 사용하므로 PlayCore와 동일한 제한 사항을 가지고 있고 install-time 에셋 팩을 관리할 수 없습니다. 또한 PlayCore API를 사용하면 애플리케이션에 PlayCore 플러그인이 필요합니다. 프로젝트에 커스텀 에셋 팩이나 Unity가 생성한 에셋 팩 중 하나가 있는 경우 Unity는 자동으로 PlayCore 종속성을 애플리케이션 매니페스트에 추가합니다.

에셋 팩을 다운로드하고 에셋에 액세스하는 방법은 에셋 팩 전송 모드에 따라 다릅니다. 에셋 팩 전송 모드에는 다음과 같이 세 가지 방법이 있습니다.

  • install-time: Google Play는 기기가 애플리케이션을 설치할 때 자동으로 install-time 에셋 팩을 다운로드합니다. Google Play는 이러한 에셋 팩을 기본 애플리케이션의 일부로 인식하며 최종 사용자는 전체 애플리케이션을 제거하지 않고는 이 에셋 팩을 제거할 수 없습니다. PlayCore API는 install-time 에셋 팩을 처리하지 않으므로 상태를 확인하거나 다운로드 요청 또는 install-time 에셋 팩을 제거할 수 없습니다. 또한 Unity에서 생성한 install-time 에셋 팩에 있는 스트리밍 에셋을 제외하고 이러한 에셋 팩 안에 있는 에셋에 직접 액세스할 수 없습니다. 스트리밍 에셋에 액세스하려면 Application-streamingAssetsPath를 사용하여 스트리밍 에셋 위치에 대한 경로를 찾은 다음 UnityWebRequest를 사용하여 해당 경로에 있는 에셋에 액세스합니다. 커스텀 에셋 팩을 생성하는 경우 표준 파일 API를 사용하여 안에 있는 에셋에 액세스할 수 없습니다. 대신 Android의 AssetManager API를 사용합니다.
  • fast-follow: Google Play는 애플리케이션을 설치한 후 자동으로 fast-follow 에셋 팩을 다운로드하기 시작합니다. 하지만 해당 애플리케이션을 처음 실행할 때 fast-follow 에셋 팩 전부를 사용할 수 있는 것은 아닙니다. 상태를 확인하고 Fast-follow 에셋 팩을 다운로드하려면 아래의 내용을 참조하십시오.
  • on-demand: Google Play는 on-demand 에셋 팩을 자동으로 다운로드하지는 않습니다. 다운로드하려면 수동으로 시작해야 합니다. 수동으로 다운로드하는 방법에 대해서는 아래의 내용을 참조하십시오.

전송 모드에 대한 자세한 내용은 전송 모드를 참조하십시오.

애플리케이션이 fast-follow 에셋 팩이나 on-demand 에셋 팩을 사용하는 경우 해당 기기는 애플리케이션이 내부의 에셋에 액세스할 수 있기 전에 반드시 이러한 에셋 팩을 다운로드해야 합니다. 기기에 에셋 팩이 있지 않은 경우 에셋 팩의 상태를 확인하고 다운로드하려면 먼저 각 에셋 팩의 이름을 알아야 합니다. Unity에서 생성한 에셋 팩의 이름을 가져오려면 AndroidAssetPacks.GetCoreUnityAssetPackNames를 호출합니다. 커스텀 에셋 팩 이름을 가져오는 런타임 API는 없으므로 반드시 직접 해당 에셋 팩을 추적해야 합니다. 빌드 시 커스텀 에셋 팩의 이름을 설정하면 그 이름이 해당 디렉토리의 이름입니다.

에셋 팩 이름을 알아낸 후 각 에셋 팩의 상태를 확인하려면 AndroidAssetPacks.GetAssetPackStateAsync를 호출하여 에셋 팩 이름을 입력합니다. 이렇게 하면 쿼리한 에셋 팩의 상태가 반환되며 그 결과를 사용하여 에셋 팩 다운로드 여부를 결정할 수 있습니다. Unity가 생성한 모든 에셋 팩의 상태를 빠르게 쿼리하고자 하는 경우 AndroidAssetPacks.coreUnityAssetPacksDownloaded를 사용할 수 있습니다. 이는 첫 번째 씬이 아닌 다른 씬을 로드하거나 Unity가 처리하는 다른 리소스에 액세스하려 하기 전에 Unity가 생성한 모든 에셋 팩을 사용할 수 있는지를 확인해야 하기 때문에 유용합니다.

다운로드해야 하는 모든 에셋 팩의 경우 AndroidAssetPacks.DownloadAssetPackAsync를 호출하여 해당 에셋 팩의 이름을 입력합니다. 에셋 팩을 다운로드하는 동안 다운로드가 일시 정지되거나 중단될 수 있기 때문에 다운로드 상태를 모니터링해야 합니다.

커스텀 에셋 팩

특정 에셋 팩에 있는 비코드 리소스 종류를 제어하고자 하는 경우 커스텀 에셋 팩을 만들 수 있습니다. Unity가 생성한 에셋 팩과는 달리 커스텀 에셋 팩의 경우 전송 모드를 설정할 수 있습니다. 커스텀 에셋 팩을 만드는 경우 Google Play Store에는 에셋 팩에 대한 크기와 수량 제한이 있으므로 유의해야 합니다. 제한 사항에 대한 자세한 내용은 다운로드 크기 제한을 참조하십시오.

커스텀 에셋 팩을 만들려면 .androidpack으로 끝나는 이름을 가진 디렉토리를 만들어야 합니다. 이 디렉토리를 프로젝트의 에셋 디렉토리나 다른 하위 디렉토리에 배치할 수 있습니다. 예를 들어 MyAssets1이라는 이름의 커스텀 에셋 팩을 만들려면 다음 단계를 따르십시오.

  1. 에셋 팩을 만들고자 하는 디렉토리로 이동합니다. 이 디렉토리는 Assets 안에 직접 있거나 Assets/CustomAssetPacks와 같은 하위 디렉토리가 될 수 있습니다.
  2. 새로운 디렉토리를 생성하여 이름을 MyAssets1.androidpack으로 지정합니다. 어떤 에셋이든 해당 에셋 팩에 추가하려면 이 폴더 안에 배치합니다. 참고: Unity는 빌드에 빈 에셋 팩을 포함하지 않습니다. 또한 에셋 팩 이름은 반드시 글자로 시작해야 하며 영문자와 숫자 또는 밑줄로 구성되어야 합니다.
  3. 기본적으로 전송 모드는 on-demand이므로 전송 모드를 변경하지 않는 경우 런타임 시 수동으로 에셋 팩을 다운로드해야 합니다. 이렇게 하는 방법에 대한 내용은 런타임 시 에셋 팩 관리를 참조하십시오.
  4. 다른 전송 모드를 사용하려면 커스텀 에셋 팩 디렉토리 안에 build.gradle이라는 파일을 만듭니다. 다음을 이 파일에 붙여넣습니다.
apply plugin: 'com.android.asset-pack'
assetPack {
    packName = "MyAssets1"
    dynamicDelivery {
        deliveryType = "fast-follow"
    }
}

이렇게 하면 전송 모드를 fast-follow로 설정하므로 Google Play는 애플리케이션을 설치한 후 자동으로 에셋 팩을 다운로드합니다. 이 파일의 포맷에 대한 내용은 Asset Delivery 통합을 참조하십시오.

참고: build.gradle 파일에 지정한 packName.androidpack 확장자 없이 설정한 에셋 팩 디렉토리 이름과 일치해야 합니다.

APK 확장 파일(OBB) 지원(Support for APK expansion files (OBB))
빠른 개발 반복을 위한 앱 패치