このページでは、Unity Runtime Library をライブラリ機能としてネイティブの iOS アプリケーションに統合する方法を説明します。
この機能を使用して、3D/2D リアルタイムレンダリング、AR 体験、 3D モデルの相互作用、2D ミニゲームなどの Unity 搭載の機能をアプリケーションに組み込むことができます。Unity Runtime Library は、ネイティブのアプリケーション内でコンテンツをロード、アクティベート、アンロードするタイミングと方法を管理するためのコントロールを公開します。
Unity を iOS のライブラリとして使用するには、通常どおりに最初に Unity から Xcode プロジェクトをビルドします。詳細は、iOS アプリケーションのビルド を参照してください。
すべての Unity iOS Xcode プロジェクトは以下の 構造 を持っています。
UnityFramework.framework ファイルも生成されます。Unity を別の Xcode プロジェクトに統合するには、両方の Xcode プロジェクト (ネイティブのものと、Unity が生成するもの) を 1 つの Xcode ワークスペースに集め、ネイティブ Xcode プロジェクトの Application ターゲットの Embedded Binaries セクションに UnityFramework.framework ファイルを加える必要があります。これを行うと、UnityFramework クラスを使用して、Unity ランタイムを制御できます。
この リポジトリ には、Unity を Xcode プロジェクトに統合する方法を示すサンプルプロジェクトとプラグインや、詳しいドキュメントがあります。
UnityFramework.framework の主要クラスである UnityFramework Objective-C クラスのインスタンスで、Unity ランタイムを制御できます。
| 方法 | 説明 |
|---|---|
+ (UnityFramework*)getInstance; |
インスタンスを UnityFramework に返すシングルトンクラスのメソッド。 |
- (UnityAppController*)appController; |
UIApplicationDelegate の UnityAppController サブクラスを返します。これは、ネイティブ側のルートの Unity クラスであり、UIView、UIViewControllers、CADisplayLink、DisplayConnection など、アプリケーションのビュー関連オブジェクトにアクセスできます。 |
- (void)setDataBundleId:(const char*)bundleId; |
Unity ランタイムが Data フォルダーを探すバンドルを設定します。詳細は、Data フォルダー に関するドキュメントを参照してください。runUIApplicationMainWithArgc または runEmbeddedWithArgc を呼び出す前にこのメソッドを呼び出します。 |
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; |
他のビューがない場合に、main メソッドから Unity を実行するデフォルトの方法です。 |
- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; |
他のビューが存在するときに Unity を実行する必要がある場合は、この方法を呼び出します。 |
- (void)unloadApplication; |
これを呼び出して Unity をアンロードし、アンロードの完了後に UnityFrameworkListener へのコールバックを受け取ります。Unity は使用しているメモリのほとんどを解放しますが、すべてではありません。Unity を再度実行できます。 |
- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; |
UnityFramework ライフサイクル関連イベントのコールバックを受け取るリスナーオブジェクトを登録します。 |
- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; |
リスナーオブジェクトの登録を解除します。 |
- (void)showUnityWindow; |
Unity 以外のビューが表示されているときにこの方法を呼び出すと、すでに実行中の Unity ビューも表示されます。 |
- (void)pause:(bool)pause; |
Unity を一時停止します。 |
- (void)setExecuteHeader:(const MachHeader*)header; |
CrashReporter が正しく動作するためには、Unity を実行する前にこれを呼び出す必要があります。 |
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; |
このメソッドは UnitySendMessage のプロキシです。名前でゲームオブジェクトを検索し、文字列 1 つのメッセージパラメーターで functionName を呼び出します。 |
(void)quitApplication:(int)exitCode; |
これを呼び出して Unity を完全にアンロードし、Unity 終了時に UnityFrameworkListener へのコールバックを受け取ります。Unity はすべてのメモリを解放します。注意この呼び出しの後には、同じプロセスで Unity を再度実行することはできません。 AppController に quitHandler を設定して、デフォルトのプロセス kill をオーバーライドできます。 |
Unity はランタイムのライフサイクルを制御しないため、ライブラリとしての Unity は、考え得るあらゆるユースケースに有効であるとは限りません。以下のような既知の制限があります。
UIStatusBarHidden または UIViewControllerBasedStatusBarAppearance キーを設定します。prefersStatusBarHidden を設定し、setNeedsStatusBarAppearanceUpdate メソッドを呼び出します。childViewControllerForStatusBarHidden を設定します。