본문 바로가기
프로그래밍/Unity

유니티 Addressables 기반 Play Asset Delivery

by neive 2024. 2. 19.
728x90

 

https://github.com/Unity-Technologies/Addressables-Sample?tab=readme-ov-file

 

GitHub - Unity-Technologies/Addressables-Sample: Demo project using Addressables package

Demo project using Addressables package. Contribute to Unity-Technologies/Addressables-Sample development by creating an account on GitHub.

github.com

ㄴ 예제를 다운 받는 github. 안에 여러가지 예제가 들어 있는데 아래 항목에 해당하는 부분만 보면 된다

 

Advanced/Play Asset Delivery

 

유니티의 플레이 에셋 딜리버리 API를 어드레서블과 함께 사용하는 방법을 보여주는 예제 프로젝트입니다. 'Assets/Scenes'에 위치한 SampleScene에는 특정 딜리버리 유형에 할당된 에셋을 로드하거나 언로드하는 세 개의 버튼이 포함되어 있습니다.

 

https://docs.unity3d.com/kr/2021.3/Manual/play-asset-delivery.html

 

Play Asset Delivery - Unity 매뉴얼

Play Asset Delivery(PAD)는 Android App Bundle (AAB) 퍼블리싱 포맷을 위한 에셋 분할 솔루션입니다. PAD는 에셋 팩을 사용하여 텍스처, 사운드, 메시와 같은 추가 에셋을 저장합니다. Google은 Google Play에서 에

docs.unity3d.com

 

 

 

Note: Play Asset Delivery requires Unity 2019.4+. This project uses Unity 2020.3.15f2.

 

이 프로젝트를 사용하여 사용자 정의 에셋 팩을 만드는 가이드로 활용하세요.

 

https://docs.unity3d.com/kr/2021.3/Manual/android-asset-packs-create-custom.html

 

커스텀 에셋 팩 생성 - Unity 매뉴얼

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

docs.unity3d.com

ㄴ 사용자 정의 에셋 팩

 

 

사용자 정의 에셋 팩을 사용하지 않으려면 Play Asset Delivery에서 제공하는 지침에 따라 기본 Addressables 구성으로 Play Asset Delivery API를 사용하십시오.

 

이 경우 AddressablesPlayerBuildProcessor가 Addressables.BuildPath에 위치한 모든 콘텐츠를 스트리밍 에셋 경로로 이동시키기 때문에 기본 Addressables 구성을 사용할 수 있습니다. Unity는 생성된 에셋 팩에 스트리밍 에셋을 할당합니다.

 

기본적인 작업흐름

 

https://developer.android.com/guide/playcore/asset-delivery?hl=ko#download-size-limits

 

Android 개발자  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Play Asset Delivery Play Asset Delivery(PAD)를 사용하면 App Bundle

developer.android.com

 

  1. 에셋 팩에 Addressable 그룹을 할당하세요. 동일한 에셋 팩에 여러 그룹을 할당할 수 있습니다. 이렇게 하면 각 배송 모드의 크기 제한에 대해 알고 있어야 합니다. 자세한 정보는 Android의 Play Asset Delivery 문서를 참조하세요.
    • 기본적으로 Addressables는 Addressables.BuildPath를 사용하는 그룹의 콘텐츠를 스트리밍 에셋 경로에 포함합니다.
    • 추가적인 사용자 정의 에셋 팩을 위해서는 각 에셋 팩마다 Assets 폴더에 "{asset pack name}.androidpack" 디렉터리를 생성해야 합니다. 선택적으로 이 디렉터리에 .gradle 파일을 추가하여 에셋 팩의 전달 유형을 지정할 수 있습니다. 기본 유형은 "on-demand" 전달입니다. 자세한 내용은 이 프로젝트의 BuildScriptPlayerAssetDelivery.cs 파일의 예시를 참조하세요.
  2. 에셋 팩에 AssetBundle을 할당하려면 .bundle 파일을 "{asset pack name}.androidpack" 디렉터리로 이동하면 됩니다(PlayAssetDeliveryBuildProcessor.cs 참조). 또한 모든 사용자 정의 에셋 팩 이름과 해당 번들이 할당된 것을 추적하는 시스템을 유지합니다(BuildScriptPlayerAssetDelivery.cs 및 PlayAssetDeliveryInitialization.cs 참조).
  3. 안드로이드 앱 번들을 빌드하고 Google Play 콘솔에 업로드하여 APK를 생성하세요.
  4. 런타임에서 번들을 로드하기 전에 자산 팩을 다운로드하세요(PlayAssetDeliveryAssetBundleProvider.cs 참조).

 

빌드 및 플레이어 설정 구성

 

 

유니티를 Android 앱 번들을 빌드하도록 구성하십시오. 자세한 내용은 "Play Asset Delivery"를 참조하십시오

  1. File > Build Settings로 이동하고 플랫폼 속성을 Android로 설정하십시오. 프로젝트 내보내기가 활성화되어 있는 경우, 앱 번들 내보내기를 활성화하십시오. 그렇지 않은 경우, 앱 번들 빌드(Google Play)를 활성화하십시오.
  2. 만약 번들된 콘텐츠를 " install-time" 전달로 사용하려면, Edit > Project Settings > Player > Publishing Settings 에서 Split Application Binary를 활성화하세요.

커스텀 어드레서블 스크립트 구성

이 샘플 프로젝트는 어셋 팩에 할당된 AssetBundles를 빌드하고 로드하는 것을 더 쉽게 만드는 커스텀 어드레서블 스크립트를 사용합니다.

  • 'Assets/PlayAssetDelivery/Data' 디렉토리에는 다음과 같은 파일이 포함되어 있습니다. :
    • A custom group template (Asset Pack Content.asset).
    • A custom data builder asset (BuildScriptPlayAssetDelivery.asset).
    • A custom initialization object (PlayAssetDeliveryInitializationSettings.asset)
  • 'Assets/PlayAssetDelivery/Editor' 디렉토리에는 다음과 같은 파일이 포함되어 있습니다. :
    • A custom data builder script (BuildScriptPlayAssetDelivery.cs).
    • A custom build processor (PlayAssetDeliveryBuildProcessor.cs)
    • A custom schema (PlayAssetDeliverySchema.cs)
  • 'Assets/PlayAssetDelivery/Runtime' 디렉토리에는 다음과 같은 파일이 포함되어 있습니다. :
    • A custom AssetBundle Provider (PlayAssetDeliveryAssetBundleProvider.cs)
    • A custom initializable object (PlayAssetDeliveryInitialization.cs)

Addressables는 대부분의 스크립트를 자동으로 가져오지만 AddressableAssetSettings에서 일부 자산을 수동으로 구성해야 합니다.

  1. "Build and Play Mode Scripts" 목록에 사용자 지정 데이터 빌더 자산(BuildScriptPlayAssetDelivery.asset)을 추가하세요.
  2. "Asset Group Templates" 목록에 사용자 지정 그룹 템플릿(Asset Pack Content.asset)을 추가하세요.
  3. "Initialization Objects" 목록에 사용자 지정 초기화 객체(PlayAssetDeliveryInitializationSettings.asset)를 추가하세요.

어드레서블 그룹을 에셋 팩에 할당합니다.

  1. Addressables 그룹 창(Window > Asset Management > Addressables Groups)으로 이동하여 새 그룹을 만들려면 툴바에서 Create > Group > Asset Pack Content를 선택하십시오. 이 그룹의 콘텐츠는 에셋 팩에 할당됩니다. 이 그룹에는 Content Packing & LoadingPlay Asset Delivery라는 2개의 스키마가 포함되어 있습니다.
  2. Play Asset Delivery 스키마에서 할당된 에셋 팩을 지정하십시오. 사용자 정의 에셋 팩을 수정하려면 Manage Asset Packs 를 선택하십시오.
    • "install-time" 전달을 위해 의도된 모든 콘텐츠를 "InstallTimeContent" 에셋 팩에 할당하십시오. 이는 생성된 에셋 팩을 대표하는 " placeholder" 에셋 팩입니다. 실제로 "InstallTimeContent"라는 사용자 정의 에셋 팩은 생성되지 않습니다.
    • 대부분의 경우 생성된 에셋 팩은 "install-time" 전달을 사용하지만, 대규모 프로젝트의 경우 "빠른 후속" 전달을 사용할 수도 있습니다. 자세한 내용은 "생성된 에셋 팩"을 참조하십시오.
    • 참고: 그룹을 에셋 팩에서 제외하려면 Include In Asset Pack을 비활성화하거나 Play Asset Delivery 스키마를 제거하십시오. 또한 해당 그룹의 Content Packing & Loading > Build Path 속성이 Addressables.BuildPath 또는 Application.streamingAssetsPath를 사용하지 않도록 확인하십시오. 해당 디렉토리에 있는 모든 콘텐츠는 생성된 에셋 팩에 할당됩니다.
  3. Content Packing & Loading 스키마에서 :
    • Build & Load Paths를 기본 로컬 경로 (LocalBuildPath 및 LocalLoadPath)로 설정합니다. 런타임에서 로드 경로를 asset pack 위치를 사용하도록 구성합니다. 이를 수행하는 방법에 대한 예제는 PlayAssetDeliveryInitialization.cs 파일을 참조하십시오.
    • 참고: Google Play 콘솔은 업로드된 콘텐츠에 대한 원격 URL을 제공하지 않으므로, asset pack에 할당된 콘텐츠에 대한 원격 경로 또는 콘텐츠 업데이트 워크플로를 사용할 수 없습니다. 원격 콘텐츠는 다른 CDN에 호스팅되어야 합니다.
    • Advanced Options > Asset Bundle Provider  에서 Play Asset Delivery Provider 를 사용하세요. 이렇게 하면 번들을 로드하기 전에 에셋 팩을 다운로드합니다.

Build Addressables

 

사용자 정의 "Play Asset Delivery" 빌드 스크립트를 사용하여 Addressables를 빌드하세요. Addressables 그룹 창에서 Build > New Build > Play Asset Delivery를 선택합니다. 이 스크립트는 다음을 수행합니다:

  1. 사용자 정의 에셋 팩을 생성하는 데 필요한 구성 파일을 만듭니다.
    • 각 에셋 팩에는 'Assets/PlayAssetDelivery/Build/CustomAssetPackContent' 디렉터리에 "{에셋 팩 이름}.androidpack"이라는 디렉터리가 있습니다.
    • 참고: 이전 빌드에서 생성된 모든 .bundle 파일은 'Assets/PlayAssetDelivery/Build/CustomAssetPackContent' 디렉터리에서 삭제됩니다.
    • 각 .androidpack 디렉토리에는 'build.gradle' 파일도 포함되어 있습니다. 이 파일이 누락된 경우 Unity는 해당 에셋 팩이 "on-demand" 전달 방식을 사용한다고 가정합니다.
  2. 'Assets/PlayAssetDelivery/Build' 디렉토리에 위치한 빌드 및 런타임 데이터를 저장하는 파일들을 생성합니다. :
    • 'BuildProcessorData.json' 파일을 생성하여 사용자 정의 에셋 팩에 할당된 번들의 빌드 경로와 .androidpack 경로를 저장합니다. 빌드할 때 이 파일은 PlayAssetDeliveryBuildProcessor가 번들을 해당 .androidpack 디렉토리로 이동시키는 데 사용됩니다.
    • 'CustomAssetPacksData.json' 파일을 생성하여 런타임에서 사용할 사용자 정의 에셋 팩 정보를 저장합니다.

런타임 스크립트를 생성하여 사용자 정의 Addressables 속성을 구성합니다. 이를 통해 런타임에서 에셋 팩으로부터 콘텐츠를 로드할 Addressables를 준비합니다. (PlayAssetDeliveryInitialization.cs 참조)

  1. 생성된 에셋 팩이 다운로드되도록 확인하세요.
  2. 내부 ID를 해당하는 에셋 팩 위치로 변환하는 사용자 정의 InternalIdTransformFunc를 구성하세요.
  3. "CustomAssetPacksData.json" 파일에서 모든 사용자 정의 에셋 팩 데이터를 로드하세요.

설정이 완료되면 Addressables API를 사용하여 에셋을 로드할 수 있습니다. (LoadObject.cs 참조)

참고: 플레이 모드에서 에셋 번들에서 콘텐츠를 로드하려면 Addressables Groups 창(Window > Asset Management > Addressables Groups)에서 Play Mode Script > Use Existing Build(구축된 그룹이 필요함)을 선택하세요.

Build the Android App Bundle

빌드 설정을 "빌드 및 플레이어 설정 구성" 지침에 맞게 구성한 후에는 File > Build Settings 으로 이동하여 Android 앱 번들을 빌드하려면 " Build "를 선택하십시오.

 

참고: 개발용 빌드는 Google Play 콘솔에 업로드할 수 없습니다. Google Play 콘솔에 앱 번들을 업로드하려면 릴리스 빌드를 생성해야 합니다. 자세한 정보는 빌드 설정을 참조하십시오.

 

PlayAssetDeliveryBuildProcessor는 번들을 자동으로 해당하는 사용자 정의 에셋 팩에 할당되도록 'Assets/PlayAssetDelivery/Build/CustomAssetPackContent'의 "{asset pack name}.androidpack" 디렉터리로 이동시킵니다. 그런 다음 Unity는 생성된 에셋 팩과 함께 모든 사용자 정의 에셋 팩을 빌드합니다.

 

 

 

...는 메뉴얼이고

 

1. Build and Play 가능한 현재 프로젝트 준비

 

2. Build Setting 에서 Build App Bundle (Google Play) 체크

 

3. Project Settings/Player/Publishing Settings 에서 Split Application Binary 체크 

 

4. Addressables-Sample-master.zip 안에서 Advanced/Play Asset Delivery/Assets/PlayAssetDelivery 폴더를

   적용하려는 프로젝트의 Assets 아래에 압축해제

 

5. Addressables Groups/Manage Profile 에서 PAD 로 쓰일 프로파일 하나 생성 후 Set Active

 

6. Window/Asset Managemant/Addressables/Settings 를 실행

 

 

 대략 옵션 비슷하게 세팅을 하는데

 

7. Build and Play Mode Scripts 에서 + 를 누르고

    Assets\PlayAssetDelivery\Data\BuildScriptPlayAssetDelivery.asset

    를 추가

 

8. Asset Group Templates 에서 + 를 누르고

    Assets\PlayAssetDelivery\Data\ Asset Pack Content.asset

   를 추가

 

9. Initalization Objects 에서 + 를 누르고

    Assets\PlayAssetDelivery\Data\PlayAssetDeliveryInitializationSettings.asset

    를 추가

 

10. Addressables Group 에서 Default Local Group 을 아래 옵션 처럼 

 

 

11. Addressables Group 에서 나머지 컨텐츠를 InstallTime / FastFollow / OnDemand 사용

   해야할 조건에 맞춰서 세팅 (본 내용은 OnDemand 로 진행)

 

12.나머지 컨텐츠 선택 후 Asset Bundle Provider 를 Play Asset Delivery Provider 로 하고

    Add Schema 를 누르고 Play Asset Delivery 를 추가 하고 Asset Pack 을 설정 

    Manage Asset Packs 를 눌러서 Asset Pack 을 분리해서 추가할 필요가 있는.. 

 

 

13. Addressables Group/Build/New Build/Play Asset Delivery 로 어드레서블 파일 생성

728x90

댓글