Search Unity

ネイティブモバイルアプリケーションに Unity で作成した機能を追加できる「Unity as a Library」のご紹介

, 6月 17, 2019

Unity 2019.3 では、Unity を Java で書かれた Android ネイティブアプリや Objective-C で書かれた iOS ネイティブアプリから制御できるライブラリとして使用できるようになります。これにより、AR その他の Unity の機能を簡単に挿入することが可能になります。

開発者の皆様の中には、プラットフォームのネイティブ技術(Android の Java や iOS の Objective-C など)で開発したアプリケーションやゲームに Unity 製の機能を含めたい方もいらっしゃることと思います。Unity 2019.3.a2 からは、Unity のランタイムコンポーネントと皆様のコンテンツがネイティブプラットフォームのプロジェクト内に統合可能となるので、ライブラリとしての Unity(「Unity as a Library」)がご使用いただけるようになります。

つまりこれは、拡張現実(AR)、3D/2D リアルタイムレンダリング、2D ミニゲームなど、Unity で開発した機能を、ネイティブモバイルアプリケーションに直接挿入できるようになったことを意味します。

機能の仕組み:プロジェクト構造に加えられた変更

読み込み・アクティベーション・アンロードの方法とタイミングをネイティブアプリケーション内で管理するための制御機能が、Unity ランタイムライブラリによって提供されます。

モバイルアプリケーションのビルドのプロセス自体は今までと変わりません。iOS アプリの Xcode プロジェクトや Android Gradle プロジェクトが Unity によって作成されます。

ただし、この機能を実現するために、生成される iOS アプリの Xcode プロジェクトと Android Gradle プロジェクトの構造が以下のように変更されました。

  • すべてのソースファイルとプラグインを含む、ライブラリ部(iOS フレームワークと Android Archive(AAR)ファイル)
  • アプリケーションを表現するデータを含みライブラリ部を実行する小さなランチャー部

Xcode および Android Gradle プロジェクトに加えられた変更に関する詳細は、フォーラムのこちらの投稿でご確認いただけます。

また、iOS および Android に Unity as a Library を統合する手順の説明(ベーシックなサンプルプロジェクトも含む)もご利用いただけます。

(注)Unity as a Library を使用するには、Android/Java および iOS/Objective-C アプリケーションのアーキテクチャに関する深い理解が必要となります。

制約事項

私達は、ネイティブのアプリケーションにホスティングされたライブラリとして Unity を使用する場合の様々なユースケースをテストしました。しかし、Unity は現在はランタイムのライフサイクルを制御しない仕様になっているため、すべてのユースケースで機能することが保証される訳ではありません。例えば以下のような制約が存在します。

  • Unity as a Library は、全画面レンダリングのみに対応しています。画面の一部のみのレンダリングには非対応です。
  • Unity ランタイムの 2 つ以上のインスタンスの読み込みには対応していません。
  • 正常に機能させるためには、サードパーティー製のプラグイン(ネイティブあるいはマネージド)の導入が必要な場合があります。

マーケティングキャンペーンに革新をもたらす技術の実現

Unity as a Library は、幅広い業界の様々なユースケースにおいて非常に有益です。中でも特筆すべきは、ブランドや広告制作会社の皆様が、AR を簡単に直接ネイティブモバイルアプリケーションに挿入できるようになったことです。

最先端のブランドは、従来のマーケティングキャンペーンに AR を導入することの価値を理解しています。Unity as a Library の実現により、プロセスが効率化されます。AR を追加するためにアプリを再構築したり、Unity をライブラリとして使うために、ブランドや広告制作会社の皆様とともにソリューションを苦労して考案する必要はなくなりました。

消費者は AR マーケティングを受け入れる準備ができています。AR を使用することでブランドは消費者とのパーソナルな関係を育むことができます。私たちは、マーケティングの革新を可能にするソリューションを提供できることを非常に嬉しく思っています。

ブランドや広告制作会社がどのように Unity を使用しているか、より詳しくお知りになりたい方は、ソリューションに関するページをご覧ください。

32 コメント

コメントの配信登録

コメント受付を終了しました。

  1. I tried unity as a plugin for android. When I am using the AR camera, it is giving me the error android_unity_bridge class error in android studio. Do you have any documentation for AR using unity as a plugin for android and ios(SWIFT)

    1. JC Cimetiere

      8月 5, 2019 5:27 pm

      Hi Jibin,
      we are working on a sample that demonstrate a native app + a Unity AR experience. Stay tuned.
      However for iOS, we won’t be supporting SWIFT for now, our focus in on Objective C.
      JC

  2. > Unity as a Library supports full-screen rendering only; rendering on only a part of the screen is not supported.

    Not supported as in “and will never be” or as in “but will be in the future”? :D

    1. JC Cimetiere

      6月 20, 2019 1:41 am

      Hi David,
      Not supported for now.
      We are considering it but it’s a tricky scenario where Unity needs to share resources with the native app. We don’t have a timeline yet, and are looking for feedback on what scenario make sense for you.
      Please jump on the forum post to share ideas.
      JC

  3. It would interesting to have it running under a Cordova hibrid App

  4. I can use this for AR in a lot of my applications so I’m excited! My only request is please release a tutorial or youtube video on an example of how to put this together as it might be a bit confusing doing guesswork once it releases.

    1. JC Cimetiere

      6月 20, 2019 1:44 am

      we are making more samples but the one shared on the forum linked in this blog post should give you all the building block you need.
      don’t forget, as I wrote:
      “Please note that using Unity as a library requires that you deeply understand the architecture of Android/Java and iOS/Objective C applications.”

  5. Honestly, this was a lot more impressive until I saw “supports full-screen rendering only.” Really, every potential idea I had up until that point was cast aside.

    1. JC Cimetiere

      6月 20, 2019 1:47 am

      Hi Liz,
      Please share your ideas on the forum. we are listening ;-)
      As responded on another similar question:
      We are considering it but it’s a tricky scenario where Unity needs to share resources with the native app. We don’t have a timeline yet, and are looking for feedback on what scenario make sense for you.

  6. FlyingHighUp

    6月 18, 2019 4:28 pm

    Could I write a Apple Watch app with Unity with this change?

    Like running the engine on the watch itself without a phone companion. Ideally I’d like my game to run both the watch and my phone so I can have a shared codebase.

    1. JC Cimetiere

      6月 19, 2019 12:35 am

      Hi,
      No, Unity does not support Watch OS, and no plan for now.

  7. Logo Victoria

    6月 18, 2019 1:40 pm

    Thank you for sharing this good information. Mobile Application Development is an interesting field. Our website have many packages about App Development. You can visit:
    App Development Packages

  8. Is it planed to be just for mobile?
    It could be amazing to use Unity rendering capabilities as a runtime for native desktop apps.
    I’m thinking in the direction of embedding Unity as a set of nodes for TouchDesigner for example.

  9. Gregory Pierce

    6月 18, 2019 3:44 am

    Unity, just go ahead and build us something for Python. The ML interface is Python, the new UI scripting stuff supports python – just go ahead and give us python support @ the engine and be done with it :)

    1. Using Python would violate the Performance by Default goal.

    2. Isaac Surfraz

      6月 18, 2019 12:38 pm

      Aside from the terrible performance implications, why would you actually need this? C# really is not that hard to learn and write. You use the right tools for the right job. Python is used for machine learning because its an industry standard and performs well for AI. The same cant be said about python and the rest of use cases, so really putting it for the rest of the engine just takes us back to the point we were with javascript.

      If you to write in python, why not just move to an actual python based graphics engine?

      1. Gregory Pierce

        6月 18, 2019 8:40 pm

        Because Unity has made a mission of making Unity a platform for more than just games. So while it is true that for regular games it would be a problematic issue – for other use cases (including as a teaching environment), Python would be excellent.

        1. They used to have Boo script, ie it was “python” the same way that unityscript was “javascript”

    3. JC Cimetiere

      6月 20, 2019 1:53 am

      Hi Gregory,
      if you care about Python for ML scenarios, please check “Unity ML Agents”:
      https://unity3d.com/machine-learning
      Unity Machine Learning Agents, the first of Unity’s machine learning product offerings, trains intelligent agents with reinforcement learning and evolutionary methods via a simple Python API.
      We don’t plan to add any new language to Unity for now. C# it is.

      1. Gregory Pierce

        6月 20, 2019 8:47 am

        Certainly JC, that’s where I currently interface with Unity for a number of RL things. Even tried to build something with IronPython a while back because Python is a good teaching/learning language. But I know you guys are busy rebuilding pretty much all of the Unity that I used to know (and that’s a good thing), so maybe when you’re done with that ;)

  10. Ehsan Sayyad

    6月 18, 2019 1:50 am

    Can’t wait for a python interface! it would be great for machine learning research projects!

    1. JC Cimetiere

      6月 20, 2019 1:54 am

      look at “Unity ML Agents”:
      https://unity3d.com/machine-learning
      Unity Machine Learning Agents, the first of Unity’s machine learning product offerings, trains intelligent agents with reinforcement learning and evolutionary methods via a simple Python API.

  11. this one is cool i really love these updates by Unity, i have a past of game development but now i am an full time app developer at https://appdevelopmentagency.com.au/. working in a professional environment boosts my creativity i am a fan of Unity.

  12. Any word on how big the framework and aar will be for an empty project?

    1. JC Cimetiere

      6月 19, 2019 12:42 am

      You can consider that the size of the final binary is the same than a normal Unity project.

  13. Stefan Maton

    6月 17, 2019 5:44 pm

    Now, this would also be great on PC. We currently prototype the integration of Unity in a WPF application and had to setup a client/server structure to handle communication between the app and Unity…

    1. Steve Lanuit

      6月 17, 2019 6:29 pm

      @Stefan Maton @Unity

      For some of our projects, we have implemented the same type of TCP communication protocol between a Unity application and a WPF / WinForm application. With the addition of the management of the inclusion of a Unity window in a WPF / WinForm Panel (SetParent, …). This works well but it would be comfortable to have native support for this type of integration.

      1. It would certainly be great to have an easier integration of Unity into desktop apps too, e.g. Qt programs. Currently, we have a setup that uses some shared memory and communicates over a lot of callbacks. But this is super cumbersome.

    2. This is in fact already possible for PC, and has been for some time now, though admittedly it isn’t well documented. We are planning to include documentation for how to embed Unity as a library for desktop platforms soon. Stay tuned.