Meta Camera Integration Photo

概要
Meta Camera API Integration Photoサンプルは、完全なソースコードとともに提供されており、Fusionを使ってMeta Questカメラで撮影した写真をリモートユーザーと共有する方法を説明しています。
ウォッチのボタン(またはコントローラのプライマリボタン)を使用して、Meta Questカメラのスナップショットを撮ることができます。この時点では、写真が全てのユーザーにスポーンされ、転送が完了して数秒経つと、写真が表示されます。
Meta Questカメラから動画を流す方法を説明したサンプルもあります。Circleメンバー限定でこちらからご覧いただけます。
技術情報
本サンプルは
Shared Authority
トポロジを使用しています。本プロジェクトはUnity 6、Fusion 2で構築され、以下のパッケージでテストを行いました。
- Meta XR Core SDK 76.0.1 : com.meta.xr.sdk.core
- Unity OpenXR Meta 2.1.1 : com.unity.xr.meta-openxr
ヘッドセットファームウェアバージョン: v74 & v76
コンピレーション : プロジェクト設定でXR Plug-in Management/OpenXR/Meta XR Subsampled Layoutオプションを無効にしてください。(Unityを再起動するたびにオプションが有効に戻ってしまいます。)
始める前に
サンプルを実行するには:
PhotonEngine DashboardでFusionIDを作成し、Real Time Settingsの
App Id Fusion
フィールドにペーストします (Fusionメニューからアクセス可能)。Create a Voice AppId in the PhotonEngine DashboardでVoice AppIDを作成し、Real Time Settingsの
App Id Voice
fi^ルドにペーストします。
ダウンロード
Version | Release Date | Download |
---|---|---|
2.0.6 | 6月 12, 2025 | Fusion Meta Camera Integration Photo 2.0.6 |
APKのダウンロード
本サンプルのデモバージョンは、以下からダウンロードできます。
フォルダ構造
メインフォルダである/MetaCameraIntegration
に本サンプルで使用した全ての要素が格納されています。
/IndustriesComponents
フォルダに他のIndustriesサンプルと共有しているコンポーネントが格納されています。
/Photon
フォルダにはFusionとPhoton Voice SDKが格納されています。
/Photon/FusionAddons
フォルダには本サンプルで使用されているIndustries Addonsが格納されています。
/Photon/FusionAddons/FusionXRShared
フォルダには、VR sharedサンプルのリグとグラビングが格納されており、他のプロジェクトト
と共有するFusionXRShared light SDKを作成しています。
/XR
フォルダには仮想現実用のコンフィグファイルが格納されています。
アーキテクチャの概要
Meta Camera API Integration PhotoサンプルはVR Shared pageで説明しているものと同様のコードベースに基づいています。特にリグ同期部分が類似しています。.
他のIndustriesサンプルと同じく、Industries Addonsへ拡張が含まれています。synchronized rays、locomotion validation、touching、teleportation smoothing、gazing systemなどの再利用可能な機能を処理できるようになっています。
画像のストリーミング自体は、FusionデータストリーミングAPIに依存しています。
このデータストリーミングAPIの帯域幅は意図的に制限されています。というのも、FusionはあくまでリアルタイムSDKであり、大容量データ転送用のプロトコルではないためです。
より頻繁なストリーミング(たとえばビデオ用途など)には、専用のSDKが適しており、Meta Cameraとの連携例は、先述の dedicated sample で紹介されています。
Meta Questサンプル
SampleSceneMetaQuestOnly
シーンは非常にシンプルで、パススルーが有効になっており、3D環境が存在しません。
接続した各ユーザーはアバターとして表示され、ウォッチのタッチスクリーンまたはコントローラーのプライマリボタンを使ってスナップショットを撮ることができます。
この時点で、すべてのユーザーに対して写真が生成されます。
写真はローカルユーザーには即座に表示され、リモートユーザーには(転送が完了した数秒後に)表示されます。
Network Connection(ネットワーク接続)
ネットワーク接続はMetaのビルディングブロックである [BuildingBlock] Network Manager
と [BuildingBlock] Auto Matchmaking
が管理しています。
[BuildingBlock] Auto Matchmaking
がルーム名とFusionトポロジを設定します。(Shared mode)
[BuildingBlock] Network Manager
にはFusionのNetworkRunner
が格納されています。ここにあるUserSpawner
コンポーネントは、ユーザーがルームに参加した時にユーザープレハブをスポーンしPhoton Voice接続を処理します。
Camera Permission(カメラ権限)
カメラへアクセスするには、権限のリクエストが必要です。
この処理は、Wfab ゲームオブジェクトに配置された WebCamTextureManager
および PassthroughCameraPermissions
コンポーネントによって管理されます。
両方のスクリプトは、Meta が提供する Unity-PassthroughCameraAPISamples に含まれています。
WebCamTextureManagerPrefab
シーン内のゲームオブジェクトはデフォルトでは無効化されており、音声接続が確立されるとVoiceConnectionFadeManager
によって自動的に有効化されます。
これは、複数の認可リクエストが同時に実行されるのを防ぐために必要な処理です。
Photo transfer(写真転送)
リモートユーザーにスナップショットを転送するには、Fusion SendReliableDataToPlayer
APIに依存するData Sync Helpers addonを使用します。
プレイヤープレハブにはCameraPhotoSpawner
コンポーネントがあります。ここには、 写真プレハブをスポーンする CreatePicture()
メソッドが格納されています。写真はQuestカメラテクスチャで初期化され、cameraPicture.SetPictureTexture()
メソッドによって転送が起動します。
Fusion SendReliableDataToPlayer
APIの帯域幅制限により、streamRatio
パラメータが写真の解像度が下がり、結果としてスナップショットの転送時間が下がることがあります。
また、通信の渋滞を避けるためCameraPhotoSpawner
に同時に行われる転送リクエストが多くなりすぎないように、抑える保護機能が搭載されています。(デフォルトでは5秒に1つのリクエストの頻度で許可されます)。
ストリーミング保護のため、ユーザーが新しい写真をスポーンできない場合には、StreamingCoolDownVisual
コンポーネントがビジュアルフィードバックを表示します。
CameraPicture
はStreamSynchedBehaviour
クラスから継承されたものであるため、リモートユーザーはOnDataProgress()
コールバックによりデータの受信通知を受けます。写真転送が完了したら、OnDataChunkReceived()
が呼び出されます。
Watch Interaction
ウォッチ(またはコントローラのプライマリボタン)を使用してスナップショットを撮影できます。
このためには、ユーザーが時計に触れたときにWatchUIManager
TakePhoto()
を呼び出すSpatialButton
コンポーネントが、ウォッチボタンゲームオブジェクトに含まれている必要があります。
各ユーザーに対して生成されるプレハブには、次の2つのウォッチが含まれていることにご注意ください:
コントローラーによって動作する手のモデル用のウォッチ
指のトラッキングによって動作する手のモデル用のウォッチ
現在のハンドトラッキングモードに応じて、NetworkHandRepresentationManager
がウォッチを有効化・無効化します。

Camera Resolution(カメラ解像度)
Metaカメラの解像度は、左手のパラメータボタンを使用して実行時に変更できます。


するとMeta Camera APIで対応している解像度がUIで表示されます。写真の解像度はMeta Camera解像度設定とstreamRatio
ファクターに合わせて自動的に数値が適用されます。
Used XR アドオン & Industries アドオン
誰でもすぐに3D/XRプロジェクトのプロトタイプを作成開始できるように、フリーアドオンをいくつか提供しています。
詳細はXR Addons をご覧ください。
また、Industries Circleメンバー特典として再利用可能なアドオンのリストを公開しています。
詳細はIndustries Addonsを参照してください。
本サンプルで使用したアドオンは以下の通りです。
XRShared
XRSharedアドオンはベースコンポーネントを提供してFusionと互換性のあるXR体験を作成します。
プレイヤーのリグパーツ同期を司り、グラビングやテレポートなどの簡単な機能を提供します。
詳細はXRSharedを参照してください。
Voice Helpers
VoiceHelpers
アドオンを使用して音声統合を行っています。
詳細はVoiceHelpers Addonを参照してください。
Data Sync Helpers
ユーザー間の写真同期に使用するアドオンです。
詳細はData Sync Helpers Industries Addons を参照してください。
Meta Core Integration
プレイヤーのハンド同期にMetaCoreIntegration
アドオンを使用しています。
詳細はMetaCoreIntegration Addon を使用してください。
XRHands synchronization
XR Hands Synchronizationアドオンは、ハンドステート(指追跡を含む)をデータの高圧縮で同期する方法を説明しています。
- Meta Unity-PassthroughCameraAPISamples "Copyright Meta Platform Technologies, LLC and its affiliates. All rights reserved;"
- サウンド