UnityとFlutterの連携メモ

背景・目的
- FlutterとUnityの連携の概要を知らない
- そもそもどのようなことができるのかを概観する
- たしかホロプラスやホロアース、REALITYはUnityとFlutter?このあたりがなぜかを調べる
結論
- クロスプラットフォームとして強いから採用されがちな組み合わせ
- 優れたUIと、ARや2D3D表現を代表とするようなUnityの高機能なレンダリングを使える
- 接続ができればできることは多そう(Unity->Flutterに送信しようとしたら苦労する)

- ホロプラスはUnityではなくFlutterで、ホロアースはUnity
- マルチプラットフォーム
- 根幹にUnityとFlutterを使うケース多い?
- FlutterでUI作れないのかな
- ゲーム文脈でFlutter出てきやすい

- Flutterアプリを作って、その配下にUnityディレクトリを置く
- ビルドの設定
- UnityとFlutterの通信

- アプリケーションサービスでリッチな動画表現、ゲーム要素を簡単に実現できるメリット
- Unityをライブラリ的に使って、ARや3Dモデル、2Dミニゲームなどを埋め込める
- フル画面レンダリングのみがサポートされています。画面の一部のみにレンダリングすることはできません。
制限
別のアプリケーションによってホストされている場合 、Unity はランタイムの ライフサイクルを制御しないため、すべてのシナリオで機能するわけではありません。既知の制限は以下のとおりです。
Android と iOS
フル画面レンダリングのみがサポートされています。画面の一部のみにレンダリングすることはできません。
Unity がアンロード状態にあるときは (Application.Unload の呼び出し後)、同じプロセスで即座に切り替えて再度実行できるように、ある程度のメモリ (100Mb 以下) を維持します。
iOS で Unity ランタイムが完全に終了した場合 (Application.Quit の呼び出し後)、同じアプリケーションセッションで再度 Unity を再起動ことはできません。
Unity ランタイムの複数のインスタンスを読み込んだり、複数の Unity ランタイムを統合したりすることはできません。
正しく動作させるために ネイティブ プラグインと マネージ プラグインの調整が必要な場合があります。
- これが一般的なFlutterアプリ構造?

Unityのパワフルな3DエンジンとFlutterのUI開発の統合
Unityは、リッチで高度な3Dゲームを開発するための強力なエンジンです。一方、FlutterはネイティブクロスプラットフォームのUI開発フレームワークです。Glartek / flutter-unityパッケージは、これらの異なる開発ツールを統合し、3Dゲームのグラフィックスとパフォーマンスを備えたFlutterアプリを作成することを可能にします。
Flutterの柔軟性とUnityのグラフィックス能力の組み合わせ
Flutterは、クロスプラットフォーム対応やウィジェットベースのUI開発など、使いやすさと柔軟性が特徴です。一方、Unityは高度な3Dグラフィックスや物理エンジン、アニメーションなどの強力な機能を持っています。Glartek / flutter-unityパッケージを使用することで、Flutterの柔軟性とUnityのグラフィックス能力を組み合わせ、優れたユーザーエクスペリエンスを持つ3Dゲームを開発することができます。
プラットフォーム間の一貫性
Glartek / flutter-unityパッケージは、iOSとAndroidの両方で動作するクロスプラットフォームアプリケーションの作成をサポートします。これにより、一度の開発で複数のプラットフォームでの展開が可能となります。また、Flutterのホットリロード機能を活用することで、開発者はリアルタイムに変更を反映させながら効率的な開発を行うことができます。
Glartek / flutter-unityパッケージは、FlutterとUnityを統合することで、優れた3Dグラフィックスとパフォーマンスを持つアプリを作成するための強力なツールです。開発者はFlutterの柔軟性とUnityの豊富なリソースを組み合わせることで、クロスプラットフォームの3Dゲームや対話型アプリを開発することができます。

3Dのモバイルアプリ作りたいけど、UnityはちょっとUIの手触りが気持ち良くないなっと思ってしまいます。
そこで今回は、UI部分をFlutterに任せちゃってヌルヌル気持ちのいいアプリの作り方を紹介します。
- サンプルあり
- ビルド先を変えればiOSでもAndroidでもビルドできる
- Unity2019以降に BuildOptions.AcceptExternalModificationsToPlayer が使えなくなってバグる

- Flutterアプロをコマンドで作成
- Unityで起動しようとしたらバグってるみたい

UnityはFlutterやReact Nativeと同じようにクロスプラットフォーム(マルチプラットフォーム)という種類のフレームワーク
- マルチプラットフォームであるのが強いみたい

引用:
Unity の人気を高めた優れた機能の 1 つは、すぐに複数のプラットフォーム向けのビルドを提供できる機能です。ただし、アプリケーションの一部だけを Unity で構成し、残りは他のフレームワークで作成するというシナリオもあるでしょう。典型的な使用例は、Flutter アプリケーション内で Unity の機能を使用することです。
これを行う理由としては、次のようなものがあります。
パフォーマンスの向上: Flutter の 2D グラフィックス機能だけではなく、Unity を 3D グラフィックスに使用することで、アプリのパフォーマンスを向上させることができます。
ユーザー エクスペリエンスの向上: Unity ゲームを Flutter アプリケーションに埋め込むと、Flutter で Google のマテリアルや Apple の Cupertino ウィジェットを使用できる、より没入型のエクスペリエンスをユーザーに提供できます。
既存のコードの再利用が容易になる: 既存の Unity ゲームを Flutter アプリケーションに簡単に統合できるため、コードとアセットの再利用が容易になります。
収益化の向上: Unity と Flutter の機能を組み合わせることで、アプリ内購入や広告を通じてアプリの収益化の可能性を高めることができます。
Flutter アプリケーションから Unity アプリケーションへの通信は、パッケージを介して可能です。そこで今回は、FlutterとUnityを使った設定方法とアプリの作り方を見ていきましょう。

- AR案件で使うみたい

- ARFoundationが使える

- パフォーマンスと安定性は課題
- Flutter アプリのネイティブ コードベースに追加できるネイティブ パッケージに変換できるように、Unity プロジェクトをネイティブ iOS および Android プロジェクトとしてエクスポートする必要
- ライブラリとしての Unity は一方向の通信のみを許可し、これは Flutter から Unity へのみであったため、Unity が Flutter にメッセージを送信できる方法を理解する必要
- Flutter の美しい UI と簡単で強力なゲーム エンジンを組み合わせて、ゲーム エンジンの可能性を備えた本物の非ゲーム モバイル アプリを作成できる

- 未解決バグ
- オフィシャルな記事に沿ってみてもバグったみたい
- https://pub.dev/packages/flutter_unity_widget