# Unity를 Android 애플리케이션에 통합

> Explains how to integrate the Unity Runtime Library into Android applications.

이 페이지에서는 Unity as a Library 기능을 사용하여 Unity 런타임 라이브러리를 Android 애플리케이션에 통합하는 방법을 설명합니다.

이 기능을 사용하여 3D/2D 실시간 렌더링, AR 경험, 3D 모델 상호 작용, 2D 미니 게임 등 Unity 기반 기능을 애플리케이션에 포함할 수 있습니다. Unity 런타임 라이브러리는 컨트롤을 노출하여 애플리케이션 안에 콘텐츠를 로드하고, 활성화하고, 언로드하는 시기와 방법을 관리합니다.

**중요**: 프로젝트에 Unity as a Library를 도입하려면 Android에서 제대로 작동하도록 [네이티브](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md) 및 [관리형](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md) 플러그인을 조정해야 할 수 있습니다. Gradle 매니페스트를 변경하는 플러그인은 [네이티브 iOS/Android 앱의 Unity as a library 사용](https://discussions.unity.com/t/using-unity-as-a-library-in-native-ios-android-apps/744882)에 설명된 Gradle 변경을 사용해야 합니다.

## 작동 방식##how-it-works

Unity에서 Gradle 프로젝트를 빌드하는 경우 다르게 작업할 필요가 없습니다.

Unity가 생성하는 모든 [Android Gradle 프로젝트](/engine/6000.0/manual/platform-specific/android/introducing/gradle-overview.md)의 구조는 다음과 같습니다.

* 다른 Gradle 프로젝트에 통합할 수 있는 **unityLibrary** 모듈의 라이브러리 부분입니다. 여기에는 Unity 런타임 및 플레이어 데이터가 포함되어 있습니다.
* 애플리케이션 이름과 해당 아이콘이 포함되어 있는 **launcher** 모듈의 경량 런처 부분입니다. Unity를 실행하는 간단한 Android 애플리케이션입니다. 이 모듈을 자체 애플리케이션으로 교체할 수 있습니다.

Unity를 또 다른 Android Gradle 프로젝트에 통합하려면 생성된 Android Gradle 프로젝트의 **unityLibrary** 모듈을 *settings.gradle* 파일을 통해 Android Unity 프로젝트에 포함해야 합니다.

이 [저장소](https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md)에는 Unity를 Android 앱에 통합하는 방법을 설명하는 예시 프로젝트 및 플러그인과 상세한 기술 자료가 포함되어 있습니다.

플레이어를 제어하려면 목적을 전달하여 Unity 활동을 시작하고 필요한 경우 이를 확장합니다. 자세한 내용은 [목적 및 목적 필터](https://developer.android.com/guide/components/intents-filters)에 대한 Android 개발자 문서를 참조하십시오. UnityPlayer Java API를 사용할 수도 있습니다.

## IUnityPlayerLifecycleEvents##iunityplayerlifecycleevents

IUnityPlayerLifecycleEvents는 Unity 플레이어의 두 가지 중요한 라이프사이클 이벤트와 상호 작용하기 위한 수단을 제공합니다.

* **Unload** - `Application.Unload` 또는 `UnityPlayer.unload()`가 Unity 플레이어를 언로드할 때 애플리케이션이 `IUnityPlayerLifecycleEvents.onUnityPlayerUnloaded`를 호출합니다. 이렇게 하면 Unity 플레이어가 모든 씬을 언로드하지만 나머지는 메모리에 로드된 상태로 유지되는 일시 정지 상태가 됩니다.
* **Quit** - Unity 플레이어가 종료되면 애플리케이션이 `IUnityPlayerLifecycleEvents.onUnityPlayerQuitted`를 호출합니다. Unity를 실행 중인 프로세스는 호출 후 종료됩니다.

`IUnityPlayerLifecycleEvents`의 인스턴스를 UnityPlayer 생성자로 전달하거나 `UnityPlayer` 및 `UnityPlayerActivity`의 서브 클래스에서 메서드를 오버라이드할 수 있습니다.

## 제한 사항##limitations

Unity는 런타임 라이프사이클을 제어하지 않으므로 Unity as a Library 기능이 일부 사례에서 작동하지 않을 수 있습니다. 알려진 제한 사항은 다음과 같습니다.

* Unity as a Library는 전체 화면 렌더링만 지원합니다. 하지만 Unity Industry 고객이라면 제한 사항과 기능이 다를 수 있습니다.
* Unity 런타임의 인스턴스를 두 개 이상 로드하거나 통합할 수 없습니다.
* 타사 플러그인([네이티브](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/native.md) 및 [관리형](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/managed.md))을 Unity 런타임과 함께 작동하도록 조정해야 할 수 있습니다.
* Unity as a Library는 [Xamarin 앱 플랫폼](https://dotnet.microsoft.com/en-us/apps/xamarin)과 호환되지 않습니다.
* Unity 런타임 라이브러리를 동적 모듈로 [Play Feature Delivery](https://developer.android.com/guide/playcore/feature-delivery)와 통합할 수 없습니다.

## 추가 리소스##additional-resources

* [다른 애플리케이션에서 Unity as a Library 사용](/engine/6000.0/manual/platform-specific/cross-platform-features/unityasa-library.md)
