Version: 2020.3
言語: 日本語
Windows
Windows 全般

Unity を Windows と UWP アプリケーションへ統合

このページでは、Unity Runtime Library を Windows とユニバーサル Windows プラットフォーム (UWP) に統合する方法を説明します。

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

UWP での使い方

UWP XAML プロジェクト出力タイプを使用すると、Unity を組み込んだ UWP プロジェクトを簡単に作成できます。生成される Visual Studio プロジェクトは、一般的な XAML の UWP プロジェクトで、Unity プロジェクトをロードするための SwapChainPanel が設定されています。このプロジェクトを Unity 以外のアプリケーションのビジネスロジックで拡張したり、置き換えたりすることができます。

SwapchainPanel を使う際に、他の要素に重ねてレンダリングしたくなる場合があります。こうすると、Unity アプリケーション以外のコンテンツの上に、背景が透明な小さなオブジェクトをレンダリングすることができます。これを行うには、PlayerSettings.WSA-transparentSwapchain オプションを有効にします。

Application.Unload でプロセス中に Unity がロードされると、Unity エンジンをアンロードしてリソースを回収することができます。

Windows での使い方

Windows では、2 つの異なる方法で Unity をアプリケーションに埋め込むことができます。

最も簡単な方法は、アプリケーションから外部プロセスとして Unity を起動し、Unity の初期化とレンダリングを行うウィンドウを -parentHWND コマンドライン引数 で指定することです。

2 つ目の方法は、既存のプロセスの中に Unity を埋め込むことです。これを行うには、Unity を UnityPlayer.dll にビルドし、任意の Win32 アプリケーションで直接ロードできるようにします。エントリーポイントのシグネチャは以下の通りです。

extern "C" UNITY_API int UnityMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd);

lpCmdLine を使って、任意のコマンドライン引数を Unity に渡し、解像度、ジョブスレッド、親 HWND などを制御します。これにより、プロセス内で Unity を動かすことができます。Unity が表示されていないときは、Application.Unload を使って、Unity が使うリソースを再要求することができます。

制限

別のアプリケーションによってホストされている場合 、Unityはランタイムの ライフサイクルを制御しないため、すべてのシナリオで機能するわけではありません。既知の制限は以下のとおりです。

  • Unity ランタイムの複数のインスタンスを読み込んだり、複数の Unity ランタイムを統合したりすることはできません。
  • 正しく動作させるために ネイティブ プラグインと マネージ プラグインの調整が必要な場合があります。

  • Unity as a Library は 2019.3 に追加NewIn20193
Windows
Windows 全般