Meeting
概要
このサンプルは、Fusion 2でシンプルなミーティングアプリケーションを開発するためのアプローチを示します。
最初に、プレイヤーはアバター選択画面から自身のアバターをカスタマイズします。その後、ミーティングルームに移動し、そこでは多くのツールや機能が設けられています。
いくつかの重要な特徴は以下の通りです。
- 異なるルームのパブリック/プライベートなグループでユーザーを分ける
- ドアを閉めた部屋の防音
- 様々な色の3Dペン
- ホワイトボードに書き込める2Dペン
- スクリーン共有
- 付箋
- カメラ
- ソーシャルディスタンス
- ユーザーにTipsを提供するインタラクティブなメニュー
PCかMACでサンプルを起動したプレイヤーは、デスクトップモード(キーボードとマウス)かVRモード(Meta Questヘッドセット)を選択できます。
技術情報
- サンプルは共有モード(Shared Mode)を使用
- 対象プラットフォームは、PC・Mac・Meta Quest
- 開発環境は、Unity 2021.3、Fusion 2、Photon Voice 2.53
- 2つのアバターソリューションに対応(自作のシンプルなアバター・「Ready Player Me」アバター)
事前準備
サンプルを実行するには、
ダッシュボードからFusionのAppIdを作成して、Realtime Settings(Fusionメニューから選択可能)の
App Id Fusion
フィールドに貼り付けてください。ダッシュボードからVoiceのAppIdを作成して、Realtime Settingsの
App Id Voice
フィールドに貼り付けてください。それから、
AvatarSelection
シーンをロードして、Play
を押してください。
ダウンロード
バージョン | リリース日 | ダウンロード | |
---|---|---|---|
2.0.1 | May 31, 2024 | Fusion meeting 2.0.1 Build 563 |
実行ファイルのダウンロード
Meetingのデモバージョンが、以下からダウンロードできます。
Stage Screen Sharing Recorder for Windowsは、以下からダウンロードできます。
WebGL
Meetingサンプルは、WebGLでビルドできます。
こちらから、MeetingのWebGLビルドをテストできます。
ただしWebGLビルドに対するいくつかUnityの制限により、正常に動作させるためには固有の対応が必要で、詳細はこちらをご覧ください。
このWebGLビルドは、WebXR(ブラウザ上のVR)に対応していません。unity-webxr-exportなどのオープンソースライブラリを使用することで対応可能ですが、デフォルトのUnityでは未対応のため、ここではそれを示しません。
Google Chromeでテストしてください(Firefoxでは、VP8コーデック問題が発生する可能性があります)。
操作方法
デスクトップ
キーボード
- 移動: WASD or ZQSD で移動
- 回転: QE or AE で回転
- ペンの色: C でペンの色を変更
- メニュー: Esc でアプリケーションのメニュー開閉
マウス
- 移動: マウス左クリックでポインタ表示、対象にテレポート
- 回転: マウス右ボタン押下中にドラッグで視点の回転
- 移動 & 回転: マウス左右ボタン押下で前進、視点の回転も可能
- 掴む: マウス左ボタンを使用してオブジェクトを掴む
Meta Quest
- テレポート: ABXYかスティック押下でポインタ表示、対象にテレポート
- 触る (チャットバブルのロックボタンなど): 単純にボタンに触れて動かす
- 掴む: グラブボタンを使用してオブジェクトを掴む
- ペンの色: ジョイスティック上下でペンの色を変更
フォルダー構造
サンプルに関するファイルは、メインフォルダーの/Meetingroom
以下にすべて含まれます。
/IndustriesComponents
には、他のIndustries Samples(Fusion Metaverseサンプルなど)と共有されるコンポーネントが含まれます。
/Photon
フォルダーには、FusionとPhoton Voice SDKが含まれます。
/Photon/FusionXRShared
フォルダーには、リグとグラブのロジックが含まれます。これはVR Sharedサンプルを元にしており、その軽量なFusionXRShared SDKは他のプロジェクトでも共有されています。
/Photon/FusionAddons
フォルダーには、このサンプルで使用されるIndustriesアドオンが含まれます。
/XR
フォルダーには、VRの設定ファイルが含まれます。
アーキテクチャ概要
Meetingサンプルは、VR Sharedと同じコードベースに依存しています(特にリグの同期)。
ここで使われるグラブシステムは、VR Shared - Local rig grabbingページの実装の改変版です。
このサンプルや他のIndustries Samplesには、レイの同期・ロコモーションの検証・タッチ・スムーズなテレポート・視線システムのような再利用可能な機能を制御するための、FusionXRSharedやIndustriesアドオンが含まれています。
使われているXRアドオンとIndustriesアドオン
3D/XRプロジェクトのプロトタイピングを誰でも簡単に始められるように、無料のアドオンを提供しています。
詳細はXR Addonsをご覧ください。
また、Industries Circleメンバー向けに、再利用可能な総合的なアドオンを提供しています。
詳細はIndustries Addonsをご覧ください。
このサンプルで使用したアドオンは以下の通りです。
XRShared
XRSharedアドオンは、XR体験を作成するための、Fusionと互換性がある基本コンポーネントを提供しています。
プレイヤーのリグパーツの同期や、グラブやテレポートなどのシンプルな機能を担当します。
詳細はXRSharedをご覧ください。
Spaces
同じルームに複数のインスタンスを作れるように、Metaverseサンプルと同じアプローチを再利用しています。
ユーザーはパブリックルームか、特定のルーム番号のプライベートルームに参加できます。
これは、アバター選択画面か、アプリケーションメニューから選択することができます。
詳細はSpace Industriesアドオンをご覧ください。
ConnectionManager
接続処理の起動とユーザーのスポーンを管理するために、ConnectionManager
アドオンを使用しています。
詳細はConnectionManagerアドオンをご覧ください。
Extended Rig Selection
サンプルで必要となる3つのリグを切り替えるために使用したアドオンです。
- Metaビルド用のVRリグ
- WindowsとMac用のデスクトップリグ
- スクリーン上でデスクトップを配信するWindows Recorderアプリケーションをビルドするためのリグ無し(実際、このモードではネットワークリグをスポーンする必要はありません)
Extended Rig Selectionの設定は以下のようになります。
詳細はExtended Rig Selection Industriesアドオンをご覧ください。
Avatar
このアドオンは、シンプルなアバター一式を含むアバター機能に対応しています。
詳細はAvatar Industriesアドオンをご覧ください。
Ready Player Me Avatar
Ready Player Meアバターとのインテグレーションのアドオンです。
詳細はReady Player Me Avatar Industriesアドオンをご覧ください。
Social distancing
快適なパーソナルスペースを確保するため、Social distancingアドオンを使用しています。
詳細はSocial distancing Industriesアドオンをご覧ください。
Locomotion validation
プレイヤーの移動を(定義されたシーン境界にとどまるように)制限するため、Locomotion validationアドオンを使用しています。
詳細はLocomotion validation Industriesアドオンをご覧ください。
Dynamic Audio group
快適さと帯域消費を最適化するユーザー間の距離を考慮しながら、ユーザー同士のチャットを可能にするため、Dynamic Audio groupアドオンを使用しています。
詳細はDynamic Audio group Industriesアドオンをご覧ください。
Audio Room
ここでは、同じルームにいない人同士で防音する方法を説明します。そのため、スライドドアで区切られた2つの部屋をシーンに作成しています。
AudioRoom
アドオンを使用して、ドアの状態に従ったDynamic Audio Groupの更新を管理します。ボタンからトリガーされるドアの開閉は、AudioDoor.ToggleDoor()
メソッドを呼び出します。
ドアのアニメーションは、AudioDoor
クラスのOnStatusChange()
イベントをリッスンするTriggerDoorAnimation
クラスで管理されます。
詳細はAudio Room Industriesアドオンをご覧ください。
Screen Sharing
ユーザーは、ミーティングルームの大スクリーン上に自身のコンピューターののスクリーンを共有しブロードキャストできます。Stage Screen Sharingサンプルとは異なり、権限管理はありません。最後にブロードキャストを開始したユーザーがスクリーンを制御します。これは、IEmitterListener
インターフェースを実装したemissionOrchestrator
によって管理されます。
そのため、クライアントがスクリーン共有を開始すると、以下のどちらかでPlayerId
が保存されます。
- クライアントがスクリーンの状態権限を持つなら、直接保存する
- クライアントが状態権限を持たないなら、RPC経由で保存する
C#
public void SetEmitter(PlayerRef emitter, string name)
{
if (Object.HasStateAuthority)
{
EmittingPlayer = emitter;
EmittingPlayerName = name;
}
else
{
RPC_SetEmitter(emitter, name);
}
}
[Rpc(sources: RpcSources.All, targets: RpcTargets.StateAuthority)]
public void RPC_SetEmitter(PlayerRef emitter, string name)
{
EmittingPlayer = emitter;
EmittingPlayerName = name;
}
他のプレイヤーによってスクリーン共有が開始されるとすぐに、リソースと帯域を節約するためStopEmitting()
によってスクリーン共有が停止されます。
詳細はScreen Sharing Industriesアドオンをご覧ください。
備考:
- FullHD解像度(1920x1080)のスクリーン共有は、Quest2とQuest3の端末で正しく動作します
- 高解像度(3440x1440など)はQuest2では動きますが、Quest3ではOSの更新でサポートされなくなっています
Drawing
ルームには、2Dペンのホワイトボードといくつかの3Dペンが含まれます。描画が完了する(ユーザーが「トリガー」ボタンを離す)と、ハンドルが表示されます。これによって、ユーザーは2D/3D描画されたものを動かすことができます。
詳細は3D & 2D drawing Industriesアドオンをご覧ください。
Data Sync Helpers
このアドオンは、2D/3D描画点・カメラ写真・付箋を同期するために使用されます。
詳細はData Sync Helpers Industriesアドオンをご覧ください。
Blocking contact
ホワイトボードの表面に2Dペンと描画ピンを固定するために、このアドオンを使用しています。
詳細はBlocking contact Industriesアドオンをご覧ください。
Interactive Menu
このアドオンは、ペンの使用方法のTipsを表示したり、Drawingの削除ボタンに使用されます。
詳細はInteractive Menu Industriesアドオンをご覧ください。
Sticky notes
このアドオンによって、ユーザーはシーン上に付箋をスポーンできます。
付箋にはテキストレイヤーが追加されています(StickyNoteText
クラス)。付箋をタッチすると、付箋がキーボードのフォーカスを獲得します。
付箋の色は、キーボードのCキー(デスクトップモード)かジョイスティックの上下(VRモード)で変更できます。
詳細はSticky Notesアドオンをご覧ください。
Texture Drawing
このアドオンは、付箋上のテクスチャ編集を同期するために使用されます。
詳細はTexture Drawingsをご覧ください。
Magnets
Magnetアドオンによって、ボード上に付箋をスナップできます。
詳細はMagnetアドオンをご覧ください。
Desktop Focus Mode
3Dのままで、ホワイトボード上に2Dペンを使って描画するのは困難です。ScreenDrawing
クラスは、Desktop Focus Modeアドオンによって、フォーカスモードと特定のユーザーインターフェースの表示を有効にします。
詳細はDesktop Focus Industriesアドオンをご覧ください。
Feedback
アプリケーションのサウンドと、触覚や音声のフィードバックを集中管理するために、Feedback
アドオンを使用しています。
詳細はFeedbackアドオンをご覧ください。
コンパイル
通常のクライアントと、Recorderクライアント(ステージスクリーン上でデスクトップを配信する)は、同じUnityのシーンを使用しています。
そのため、コンパイルしたいクライアントに応じて手作業で修正する必要があります。
Recorderクライアントのコンパイル
Recorderアプリケーションをコンパイルするには、以下の2つのステップに従ってください。
1/ AvatarSelection
シーンを開きます。LoadMainSceneInRecorderMode
ゲームオブジェクトのIs Recorder Compilation Mode
にチェックを入れて、アバター選択シーンをロードせずに直接メインシーンをロードするようにします。
これは、通常クライアントとRecorderクライアントのシーンリストを一致させるために必要になります。
2/ MeetingRoom
シーンを開きます。ExtendedRigSelection
ゲームオブジェクトのクラスで、Selection Mode
パラメーターをSelected by User Pref
に設定します。
3/ Unityのパラメーターをいくつか変更します。
Project Settings
/Player
:Product name
の変更 : 例として"Recorder"を追加します
Project Settings
/Player
/Resolution and Presentation
/Resolution
- Fullscreen Mode : Windowed
- Default Screen Width : 640
- Default Screen Height : 380
- Resizable : No
- Allow Fullscreen : No
通常クライアントのコンパイル
通常クライアントアプリケーションをコンパイルするには、以下の3つのステップに従ってください。
1/ AvatarSelection
シーンを開きます。LoadMainSceneInRecorderMode
ゲームオブジェクトのIs Recorder Compilation Mode
のチェックを外します。
2/ MeetingRoom
シーンを開きます。ExtendedRigSelection
ゲームオブジェクトのクラスで、Selection Mode
パラメーターをSelected by User Pref
に設定します。
3/ Unityのパラメーターをいくつか変更します。
Project Settings
/Player
:Product Name
の変更 : 例として"Client"を追加します
Project Settings
/Player
/Resolution and Presentation
/Resolution
- Fullscreen Mode : Fullscreen Windows
- Resizable : Yes
- Allow Fullscreen : Yes
サードーパーティー製コンポーネント
- Oculus Integration
- Oculus Lipsync
- Oculus Sample Framework hands
- Ready player me
- Sounds
- Video
- 概要
- アーキテクチャ概要
- 使われているXRアドオンとIndustriesアドオン
- XRShared
- Spaces
- ConnectionManager
- Extended Rig Selection
- Avatar
- Ready Player Me Avatar
- Social distancing
- Locomotion validation
- Dynamic Audio group
- Audio Room
- Screen Sharing
- Drawing
- Data Sync Helpers
- Blocking contact
- Interactive Menu
- Sticky notes
- Texture Drawing
- Magnets
- Desktop Focus Mode
- Feedback
- コンパイル
- サードーパーティー製コンポーネント