Unity 앱 감량 및 ODR 구현 가이드
이 문서는 Unity를 사용하여 iOS 및 tvOS에서 앱 감량(App Thinning)과 온디멘드 리소스(On-Demand Resources)를 구현하는 방법을 설명합니다. 앱 감량은 사용자의 기기에 맞게 최적화된 파일 크기와 성능을 제공하는 기능입니다.
아이템 목록
앱 감량
앱 감량은 iOS 및 tvOS에서 애플리케이션의 크기를 최적화하는 방법입니다. 장치에 따라 최소한의 공간을 차지하면서 가장 많은 기능을 제공하는 것을 목표로 합니다. Apple 개발자 라이브러리에서 앱 감량에 대한 자세한 내용을 확인할 수 있습니다.
온디멘드 리소스 설정
온디멘드 리소스(ODR)는 애플리케이션의 필수적인 에셋을 분리하고 선택적으로 다운로드 받을 수 있도록 하는 기능입니다. 다음 단계에 따라 ODR을 설정할 수 있습니다.
- 프로젝트 빌드 타입 확인
- 메뉴 바에서
File > Build Settings를 선택하여 빌드 타입이 iOS인지 확인합니다. - 플랫폼 전환
- iOS가 아닌 경우 iOS를 선택하고
Switch Platform클릭. - 플레이어 설정
Player Settings버튼을 클릭하고Other Settings탭으로 이동하여Use on demand resources체크박스를 선택합니다.
에셋 번들 생성
에셋 번들은 선택적인 리소스를 포함하는 파일로, ODR 기능을 통해 다운로드 받을 수 있습니다. 에셋 번들을 만들려면 다음과 같은 과정을 거칩니다.
- 에셋 폴더 생성
- 에셋 번들에 포함할 파일을 모아 폴더를 생성합니다.
- 태그 할당
- 태그를 생성하거나 할당하여 에셋 번들을 구별합니다. 태그는 반드시 소문자로 설정합니다.
- 에디터 스크립트 작성
- 에디터 스크립트를 작성하여 에셋 번들을 생성합니다.
아래는 BuildiOSAssetBundles.cs 스크립트의 예제입니다.
using UnityEngine;
using UnityEditor;
public class BuildiOSAssetBundles : MonoBehaviour
{
[InitializeOnLoadMethod]
static void SetupResourcesBuild()
{
UnityEditor.iOS.BuildPipeline.collectResources += CollectResources;
}
static UnityEditor.iOS.Resource[] CollectResources()
{
return new UnityEditor.iOS.Resource[]
{
new UnityEditor.iOS.Resource("textures", "Assets/ODR/textures").AddOnDemandResourceTags("textures"),
new UnityEditor.iOS.Resource("bundle", "Assets/Bundles/bundle.unity3d").AddOnDemandResourceTags("bundle"),
};
}
[MenuItem("Bundle/Build iOS AssetBundle")]
static void BuildAssetBundles()
{
var options = BuildAssetBundleOptions.None;
bool shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;
#if UNITY_TVOS
||
||
#endif
if (shouldCheckODR)
{
#if ENABLE_IOS_ON_DEMAND_RESOURCES
if (PlayerSettings.iOS.useOnDemandResources)
||
||
#endif
#if ENABLE_IOS_APP_SLICING
||
||
#endif
}
BuildPipeline.BuildAssetBundles("Assets/ODR", options, EditorUserBuildSettings.activeBuildTarget);
}
}
앱 슬라이싱
앱 슬라이싱은 기기에 맞게 최적화된 에셋을 다운로드 받을 수 있도록 하는 기능입니다. 예를 들어, 레티나 iPad에 고해상도 에셋을, 저해상도 기기에는 저해상도 에셋을 제공하는 방식입니다.
배리언트를 정의할 때, variants 항목을 추가하여 자동으로 에셋 파일에 해당 배리언트를 붙일 수 있습니다. 아래는 BuildiOSAppSlices.cs의 예제입니다.
using UnityEngine;
using UnityEditor;
public class BuildiOSAppSlices : MonoBehaviour
{
[InitializeOnLoadMethod]
static void SetupResourcesBuild()
{
UnityEditor.iOS.BuildPipeline.collectResources += CollectResources;
}
static UnityEditor.iOS.Resource[] CollectResources()
{
return new UnityEditor.iOS.Resource[]
{
new UnityEditor.iOS.Resource("textures").BindVariant("Assets/ODR/textures.hd", "hd")
.BindVariant("Assets/ODR/textures.sd", "sd")
.AddOnDemandResourceTags("textures"),
};
}
[MenuItem("Bundle/Build iOS App Slices")]
static void BuildAssetBundles()
{
var options = BuildAssetBundleOptions.None;
bool shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;
#if UNITY_TVOS
||
||
#endif
if (shouldCheckODR)
{
#if ENABLE_IOS_ON_DEMAND_RESOURCES
if (PlayerSettings.iOS.useOnDemandResources)
||
||
#endif
#if ENABLE_IOS_APP_SLICING
||
||
#endif
}
BuildPipeline.BuildAssetBundles("Assets/ODR", options, EditorUserBuildSettings.activeBuildTarget);
}
}
추가 리소스
- 어드레서블 에셋 마이그레이션 가이드
- 어드레서블 샘플
- Apple의 개인정보보호 매니페스트 정책 요구 사항
이 가이드를 통해 Unity 프로젝트에서 앱 감량과 ODR을 효율적으로 적용할 수 있습니다. Unity의 공식 문서를 참고하여 더 많은 정보를 얻으세요.