# Unity を Android アプリケーションに統合

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

このページでは、Unity Runtime Library をライブラリ機能として Android アプリケーションに統合する方法を説明します。

この機能を使用して、3D/2D リアルタイムレンダリング、AR 体験、 3D モデルの相互作用、2D ミニゲームなどの Unity 搭載の機能をアプリケーションに埋め込むことができます。Unity Runtime Library は、 アプリケーション内でコンテンツをロード、アクティベート、アンロードするタイミングと方法を管理するためのコントロールへのアクセスを可能にします。

**重要**: プロジェクトに 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 マニフェストに変更を加えるプラグインは、[Using Unity as a library in native iOS/Android apps](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)の構造は以下のとおりです。

* **unityLibrary** モジュールのライブラリ部分。他の Gradle プロジェクトに統合できます。これには、Unity ランタイムと Player データが含まれています。
* **launcher** モジュールの薄いランチャー部分。アプリケーション名とそのアイコンが含まれています。Unity を起動するシンプルな Android アプリケーションです。このモジュールを独自のアプリケーションに置き換えることができます。

Unity を別の Android Gradle プロジェクトに統合するには、*settings.gradle* ファイルを使用して、生成された Android Gradle プロジェクトの **unityLibrary** モジュールを Android Unity プロジェクトに加える必要があります。

この[リポジトリ](https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md)には、Unity を Android アプリケーションに統合する方法を示すサンプルプロジェクト、プラグイン、ドキュメントが含まれています。

プレイヤーをコントロールするには、インテントを継承して Unity のアクティビティを起動し、必要に応じて拡張します。詳細は、Android 開発者ドキュメントの[インテントとインテント フィルタ](https://developer.android.com/guide/components/intents-filters)を参照してください。UnityPlayer Java API を使用することもできます。

## IUnityPlayerLifecycleEvents##iunityplayerlifecycleevents

IUnityPlayerLifecycleEvents は Unity Player の 2 つの重要なライフサイクルイベントと相互作用する方法を提供します。

* **Unload** - `Application.Unload` または `UnityPlayer.unload()` が Unity Player をアンロードするときに、アプリケーションが `IUnityPlayerLifecycleEvents.onUnityPlayerUnloaded` を呼び出します。これにより、Unity Player は一時停止の状態になり、すべてのシーンがアンロードされますが、他のすべてのシーンはメモリにロードされたままになります。
* **Quit** - Unity Player が終了すると、アプリケーションは `IUnityPlayerLifecycleEvents.onUnityPlayerQuitted` を呼び出します。Unity を実行していたプロセスは、この呼び出しの後に終了します。

`IUnityPlayerLifecycleEvents` のインスタンスを UnityPlayer コンストラクターに渡すことができます。または `UnityPlayer` と `UnityPlayerActivity` のサブクラスのメソッドをオーバーライドすることもできます。

## 制限##limitations

Unity はランタイムのライフサイクルをコントロールしないため、ライブラリとしての Unity はすべてのシナリオで機能するわけではありません。既知の制限は以下のとおりです。

* Unity はライブラリとして全画面のレンダリングのみをサポートします。ただし、Unity Industry のお客様は、制限と機能が異なる場合があります。
* Unity ランタイムの複数のインスタンスを読み込んだり統合したりすることはできません。
* 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 はライブラリとして [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)
