Meta Camera Integration Photo

Level
BEGINNER

概要

Meta Camera API Integration Photoサンプルは、完全なソースコードとともに提供されており、Fusionを使ってMeta Questカメラで撮影した写真をリモートユーザーと共有する方法を説明しています。

ウォッチのボタン(またはコントローラのプライマリボタン)を使用して、Meta Questカメラのスナップショットを撮ることができます。この時点では、写真が全てのユーザーにスポーンされ、転送が完了して数秒経つと、写真が表示されます。

Need video streaming ?

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 Voicefi^ルドにペーストします。

ダウンロード

VersionRelease DateDownload
2.0.66月 12, 2025Fusion 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コンポーネントがビジュアルフィードバックを表示します。

CameraPictureStreamSynchedBehaviourクラスから継承されたものであるため、リモートユーザーは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アドオンは、ハンドステート(指追跡を含む)をデータの高圧縮で同期する方法を説明しています。

Back to top