mocopi Photon Bridge
概要
mocopi Photon Bridgeサンプルは、ローカルのSony mocopiセンサーから受信したモーションデータをリモートに共有する方法を示します。
mocopiセンサーのデータはmocopiモバイルアプリに送信され、UDPを介してmocopi Receiver SDKを使用するアプリケーションに送信されます。
こうしたアプリケーションでPhoton SDKを使用することで、モーションデータをリモートユーザーと共有できます。

技術情報
- サンプルは共有モード(Shared Mode)を使用
- 開発環境は、Unity 6000.0.58f2、Fusion 2.0.9、Mocopi Receiver 1.1.0
事前準備
サンプルを実行するには、
- PhotonEngine ダッシュボードからFusionのAppIdを作成して、Realtime Settings(Fusionメニューから選択可能)の
App Id Fusionフィールドに貼り付けてください。 - サンプルを実行している端末にmocopiのモーションデータを送信してください、またはBVH Senderを使用してモーションデータを送信することもできます。
- それからシーンをロードして、
Playを押してください。
ダウンロード
モーションデータ同期方法の選択肢
mocopi Receiver SDKでは、取得したmocopiモーションデータを利用して、アバターのポーズを変更する方法が示されています。
Receiverが収集したデータをリモートユーザーに送信する方法は主に2つあります。
- 位置の同期:モーションデータから計算されたボーンのローカルな位置/回転をリモートユーザーに共有します。
- モーションデータの同期:モーションデータを直接共有し、リモートユーザーはそれを自由に使用できます。
オプション 1:位置の同期
位置を同期するオプションはよりシンプルで、おそらくほどんどのユースケースに適しています。このオプションでは、mocopi Receiver SDKのMocopiAvatarスクリプトがローカルで通常通りにアバターのボーンの位置を決定し、その後にFusionのコンポーネントを使用してボーンの位置をリモートユーザーと同期します。
リモートユーザー側では、ボーンの位置にはFusionの補間が使用されます。最後に、SkinnedMeshRendererがアバターのメッシュを適切に調整します。

オプション 2:モーションデータの同期
モーションデータを同期するオプションは、mocopi Receiver SDKのMocopiSimpleReceiverからモーションデータを収集し、そのデータをリモートユーザーに直接送信します。
リモートユーザー側では、ボーンの位置をMocopiAvatarの入力として使用できます。その場合、MocopiAvatarの補間機能を使用してアバターを移動されます。あるいは、ボーンの位置にFusionの補間を使用することも可能です。その場合、ボーンの位置は任意の目的で使用できます。

モーションデータを同期するオプションを実装するには、mocopi SDKに若干の修正が必要になります。修正内容はサンプルプロジェクトに含まれています。
これらの変更は、クラス継承を可能にし、コードの重複を回避することで、mocopi SDKとの統合をシンプルにするためのものです。
このオプションを使用したい場合、またはmocopi SDKの修正にサポートが必要な場合は、お気軽にお問い合わせください。
プロジェクト内容
プロジェクトには4つのシーンが含まれています。
| シーンの場所 | 説明 |
|---|---|
| /Scenes/NTSync/NetworkMultipleTransformVersion | NetworkMultipleTransformを使用した位置の同期例 |
| /Scenes/NTSync/NetworkTransformVersion | 通常のNetworkTransformを使用した位置の同期例 |
| /Scenes/MotionDataSync/NetworkedMotionData_MocopiAvatarVersion | カスタムMocopiAvatarを使用したモーションデータの同期例 |
| /Scenes/MotionDataSync/NetworkedMotionData_SimpleRepresentationVersion | MocopiAvatarではなくmocopiのシンプルな表現を使用したモーションデータの同期例 |
NetworkMultipleTransformVersion
これは、ほとんどのユースケースに推奨されるバージョンです。
位置の同期は、27個のボーンそれぞれにNetworkTransformを付けることで実現可能です。しかし、ボーンの移動範囲には制限がある(ボーンは親から遠くまでは移動できない)ため、専用コンポーネントを使用することで帯域消費を最適化できます。
NetworkedMultipleTransformコンポーネントは、FusionのNetworkTransformのロジックをニーズに合わせてよりシンプルに再現したものになります。
- 27個のボーンすべてを単一のコンポーネントで同期可能(多数の
NetworkTransformコンポーネントによるオーバーヘッドを削減) - 位置と回転を圧縮済み
NetworkTransformVersion
このバージョンは、位置の同期に通常のNetworkTransformを使用しています。帯域消費が大きいため、他のバージョンほど実用性はありませんが、Fusionの基本的な使用方法だけで理解できる非常にシンプルな一例として見ることができます。
NetworkedMotionData_MocopiAvatarVersion
ほとんどの場合、これが必要になることはない点にご留意ください。
モーションデータを同期する実装例です。モーションデータ同期の補間は行わず、MocopiAvatarの補間に依存しています。
生のモーションデータを完全に制御する必要がある上級開発者にとって、このバージョンは適切な選択になりえます。これは、Fusionの補間オプションを使用する場合でも、NetworkedMocopiMotionDataを継承してRender()内で独自のデータ処理を行う場合でも同様です。
NetworkedMotionData_SimpleRepresentationVersion
この実装ではMocopiAvatarコンポーネントを使用せず、単にボーンの位置を調整することで、MeshRendererがそれに合わせてアバターのメッシュを調整できるようになっています。