「popopo-ipc」でUnityのメインスレッドを止めずに送受信できた
- 公開
- 正式公開 2026-07-16
- 作り手
- POPOPO Inc.(会社)
- 対応
- iOS・Android
- 言語
- Dart・C#・Rust
- 価格
- 無料(MIT ライセンス)
- 評価
- GitHub のスター 87(2026-10-08)
どんなアプリか
Flutter - Unity 間の高速なメッセージングを実現するためのライブラリ群です。
POPOPO Inc.、GitHub の README
Flutter のアプリに Unity を埋め込んだときに、両者の間でメッセージをやりとりするためのライブラリ群です。C# と Dart それぞれのネイティブ FFI を使い、関数ポインタの交換と、ネイティブメモリ上の共有バッファでやりとりします。MethodChannel や UnitySendMessage を経由しないため、シリアライズや文字コードの変換、スレッドの乗り換えを減らせると説明されています。
README には、MethodChannel と UnitySendMessage を組み合わせる従来の方式と実機で比べた結果が載っています。文字列を送って返ってくるまでの時間は、popopo-ipc を1としたとき、従来の方式で約200〜300でした。
Unity のメインスレッドを止めずに、どのスレッドからでも送受信できます。送る中身は文字列に限らずバイト列で、形式は問いません(今は protobuf を想定)。送った先の処理の成否を表すステータスコードと返事のデータを受け取れ、タイムアウトも設定できます。1つのリクエストに複数の返事を返すストリームの形も使え、Unity から Flutter へのイベント配信に使えると書かれています。
リポジトリは、土台となる Rust 製のネイティブライブラリ、Flutter(Dart)側のクライアント、Unity(C#)側のパッケージ、サンプルの4つで構成されています。サンプルでは、従来の方式と popopo-ipc の往復時間を iOS や Android の実機で比べられます。
料金とデータの置き場所
GitHub で MIT ライセンスのもと公開されています。
同じ分野のアプリ
| 名前 | 型 | 仕掛け | 対応 | 料金 |
|---|---|---|---|---|
| popopo-ipc | 言語間メッセージング | FFI で関数ポインタと共有バッファを交換し、Flutter と Unity の間をつなぐ | Flutter(Dart)・Unity(C#)、iOS / Android | 無料(OSS, MIT) |
| Zero Messenger | メッセージング(Pub/Sub) | メモリ割り当てゼロのメッセージング(Pub/Sub) | .NET・Unity(C#) | 無料(OSS, MIT) |
| pyproc | 言語間呼び出し | Unix ドメインソケットで Go から Python の関数をローカル関数のように呼ぶ | Go ライブラリ+Python ワーカー | 無料(OSS, Apache-2.0) |
| CsSqlite | SQLite バインディング | .NET と Unity 向けの軽量な SQLite バインディング | NuGet・Unity パッケージ | 無料(OSS, MIT) |
入れる前に
今の実装は、Unity と Dart の両方がまったく同じネイティブライブラリを dlopen できることを前提にしています。Dart 側から接続するのは、Unity 側でチャンネルの Listen を始めた後です。
受け取った返事は Dart 側で破棄する必要があります。Unity 側では、受け取ったリクエストの中身はコールバックを抜けると自動で破棄されるため、非同期に処理するときはコールバックの中でコピーを取るよう書かれています。
Unity 側でリクエストを受け取る処理は、Unity のメインスレッドではなく専用のワーカースレッドで動きます。