This document is about: FUSION 2
SWITCH TO

Meeting

Level 4
Available in the Industries Circle
Circle

概要

このサンプルは、Fusion 2でシンプルなミーティングアプリケーションを開発するためのアプローチを示します。

最初に、プレイヤーはアバター選択画面から自身のアバターをカスタマイズします。その後、ミーティングルームに移動し、そこでは多くのツールや機能が設けられています。

いくつかの重要な特徴は以下の通りです。

  • 異なるルームのパブリック/プライベートなグループでユーザーを分ける
  • ドアを閉めた部屋の防音
  • 様々な色の3Dペン
  • ホワイトボードに書き込める2Dペン
  • スクリーン共有
  • 付箋
  • カメラ
  • ソーシャルディスタンス
  • ユーザーにTipsを提供するインタラクティブなメニュー

PCかMACでサンプルを起動したプレイヤーは、デスクトップモード(キーボードとマウス)かVRモード(Meta Questヘッドセット)を選択できます。

Fusion Meeting Overview

技術情報

  • サンプルは共有モード(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の設定は以下のようになります。

Fusion Meeting 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つの部屋をシーンに作成しています。

Fusion Meeting Sliding Door Audio Room

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アドオンをご覧ください。

Fusion Meeting ScreenSharing Screen
Fusion Meeting ScreenSharing Screen
Fusion Meeting ScreenSharing Screen

備考:

  • FullHD解像度(1920x1080)のスクリーン共有は、Quest2とQuest3の端末で正しく動作します
  • 高解像度(3440x1440など)はQuest2では動きますが、Quest3ではOSの更新でサポートされなくなっています

Drawing

ルームには、2Dペンのホワイトボードといくつかの3Dペンが含まれます。描画が完了する(ユーザーが「トリガー」ボタンを離す)と、ハンドルが表示されます。これによって、ユーザーは2D/3D描画されたものを動かすことができます。

詳細は3D & 2D drawing Industriesアドオンをご覧ください。

Fusion Meeting 3D Drawing
Fusion Meeting 2D Drawing
Fusion Meeting 2D Drawing
Fusion Meeting 2D Drawing

Data Sync Helpers

このアドオンは、2D/3D描画点・カメラ写真・付箋を同期するために使用されます。

詳細はData Sync Helpers Industriesアドオンをご覧ください。

Blocking contact

ホワイトボードの表面に2Dペンと描画ピンを固定するために、このアドオンを使用しています。

詳細はBlocking contact Industriesアドオンをご覧ください。

Interactive Menu

このアドオンは、ペンの使用方法のTipsを表示したり、Drawingの削除ボタンに使用されます。

詳細はInteractive Menu Industriesアドオンをご覧ください。

Fusion Meeting Interactive Menu for meeting sample
Fusion Meeting Interactive Menu for meeting sample

Sticky notes

このアドオンによって、ユーザーはシーン上に付箋をスポーンできます。
付箋にはテキストレイヤーが追加されています(StickyNoteTextクラス)。付箋をタッチすると、付箋がキーボードのフォーカスを獲得します。
付箋の色は、キーボードのCキー(デスクトップモード)かジョイスティックの上下(VRモード)で変更できます。

詳細はSticky Notesアドオンをご覧ください。

Fusion Meeting Sticky Notes for meeting sample

Texture Drawing

このアドオンは、付箋上のテクスチャ編集を同期するために使用されます。

詳細はTexture Drawingsをご覧ください。

Magnets

Magnetアドオンによって、ボード上に付箋をスナップできます。

詳細はMagnetアドオンをご覧ください。

Desktop Focus Mode

3Dのままで、ホワイトボード上に2Dペンを使って描画するのは困難です。ScreenDrawingクラスは、Desktop Focus Modeアドオンによって、フォーカスモードと特定のユーザーインターフェースの表示を有効にします。

Fusion Meeting 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のパラメーターをいくつか変更します。

Fusion Meeting Room Screen Sharing Recorder Unity Parameters
  • 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のパラメーターをいくつか変更します。

Fusion Meeting Room Screen Sharing Normal Unity Parameters
  • Project Settings / Player :

    • Product Nameの変更 : 例として"Client"を追加します
  • Project Settings / Player / Resolution and Presentation / Resolution

    • Fullscreen Mode : Fullscreen Windows
    • Resizable : Yes
    • Allow Fullscreen : Yes

サードーパーティー製コンポーネント

Back to top