ドキュメント

Unity Engine

Unity Engine

Unity をネイティブ iOS アプリケーションに統合

Integrate the Unity Runtime Library into iOS applications.
読み終わるまでの所要時間 9 分最終更新 1ヶ月前

このページでは、Unity Runtime Library をライブラリ機能としてネイティブの iOS アプリケーションに統合する方法を説明します。
この機能を使用して、3D/2D リアルタイムレンダリング、AR 体験、 3D モデルの相互作用、2D ミニゲームなどの Unity 搭載の機能をアプリケーションに組み込むことができます。Unity Runtime Library は、ネイティブのアプリケーション内でコンテンツをロード、アクティベート、アンロードするタイミングと方法を管理するためのコントロールを公開します。

しくみ

Unity を iOS のライブラリとして使用するには、通常どおりに最初に Unity から Xcode プロジェクトをビルドします。詳細は、iOS アプリケーションのビルド を参照してください。
すべての Unity iOS Xcode プロジェクトは以下の 構造 を持っています。
  • UnityFramework ターゲットのライブラリ部分。ソース、プラグイン、依存フレームワークが含まれます。
    UnityFramework.framework
    ファイルも生成されます。
  • Unity-iPhone ターゲットの薄いランチャー部分。アプリケーション表現データを含み、ライブラリを実行します。Unity-iPhone ターゲットは、UnityFramework ターゲットに 1 つの依存関係を持ちます。
Unity を別の Xcode プロジェクトに統合するには、両方の Xcode プロジェクト (ネイティブのものと、Unity が生成するもの) を 1 つの Xcode ワークスペースに集め、ネイティブ Xcode プロジェクトの Application ターゲットの Embedded Binaries セクションに
UnityFramework.framework
ファイルを加える必要があります。これを行うと、
UnityFramework
クラスを使用して、Unity ランタイムを制御できます。
この リポジトリ には、Unity を Xcode プロジェクトに統合する方法を示すサンプルプロジェクトとプラグインや、詳しいドキュメントがあります。

UnityFramework クラス

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 は、考え得るあらゆるユースケースに有効であるとは限りません。以下のような既知の制限があります。
  • Unity はライブラリとしてフル画面レンダリングのみをサポートし、画面の一部でのレンダリングはサポートしていません。
  • Unity ランタイムの複数のインスタンスをロードすることはできません。
  • サードパーティのプラグイン (ネイティブ と マネージ の両方) が Unity ランタイムで動作するように、調整が必要な場合があります。
  • ネイティブ iOS アプリケーションで Unity をライブラリとして使用する場合に、iOS Player 設定 でデバイスのステータスバーの可視性を調整することはできません。その目的には、以下のいずれかのオプションを使用することを検討してください。