Stage
Industries Circleメンバーシップをお持ちになると、完全なスイートだけでなく専用ライセンスオプションも使用できるようになります。
概要
FusionStage サンプルでは、Fusionを使用した最大200人までのソーシャルアプリケーションの開発方法について説明しています。
各プレイヤーはアバターで表示され、Photon Voice SDKにより同じチャットバブル内にいる他のプレイヤーと会話することができます。
そして、一人のユーザーがステージに立ち、コンテンツの発表を始めることができます。
本サンプルの特徴:
- はじめに、アバター選択画面でアバターをカスタマイズします。
- それから、Stage(ステージ)シーンへ参加します。本サンプルをPCまたはMACで起動している場合、プレイヤーはデスクトップモード(キーボードとマウスを使用)とVRモード(メタクエストヘッドセットを使用)から選択できます。
- プレイヤーは同じ静的チャットバブル内にいる他のプレイヤーと会話することができます。各静的チャットバブルでは、新しいプレイヤーが入ってこれないようにするロックボタンが使用可能です。
- ステージにいられうのは1人のユーザーのみ。これにより、ルーム内の全員へ向けて話せるようになります。プレゼンターロールを担えるユーザーは1回につき1人のみです。
- プレゼンターの声は空間化されません。スピーカーのように全員に聞こえます。
- ここで、全ユーザー間でプレイバックが同期されている動画などのコンテンツを共有することが可能になります。
- ステージカメラシステムはプレゼンターを追跡して、プレゼンターに専用画面を提供します。
更なる技術詳細はコメントに直接記載されています。
技術情報
- 本サンプルではShared Modeトポロジーを採用
- 実行可能:PC、Mac、Meta Quest
- 開発環境:Unity 2021.3.10f1
- 2アバターソリューションに対応(手作りのシンプルなアバター、Ready Player Me 1.9.0のアバター)
開始する前に
サンプルを実行するには :
Fusion AppId in the PhotonEngine DashboardでFusion AppIdを作成し、 Real Time Settingsの
App Id Fusion
にペーストする (Fusionメニューからアクセス可能)Voice AppId in the PhotonEngine DashboardでVoice AppIdを作成し、Real Time Settingsの
App Id Voice
にペーストするAvatarSelection
シーンを読み込んで、Play
を押す
ダウンロード
バージョン | リリース日 | ダウンロード | ||
---|---|---|---|---|
0.0.18 | Nov 03, 2022 | Fusion Stage 0.0.18 Build 70 |
Handling Input
Desktop
キーボード
- 移動 : WASD または ZQSD で歩行
- 回転 : QE または AE で回転
マウス
- 移動 : マウスを左クリックするとポインタを表示。離すと、その場所に(受け入れ可能な場合)テレポート。
- 回転 : 右ボタンを押したままマウスを動かすと視点が回転。
- 移動と回転 :マウスの右ボタンと左ボタンを押したままにすると、前方へ移動。マウスを動かすと回転。
- つかむ : オブジェクトの上にマウスを置いて左クリックをするとつかむ。
Meta Quest
- テレポート : A、B、X、Y、またはスティックを押すとポインタを表示。離すと、その場所に(受け入れ可能な場合)テレポート。
- 触る (チャットバブルのロクボタンなど) : ボタンに触れると切り替え。
- つかむ : オブジェクトの上に手をかざし、コントローラのつかむボタンを使用する。
フォルダ構造
メインフォルダである/Stage
には本サンプルに特有の要素が含まれています。
/Expo
フォルダには、Expoサンプルに特有の要素が全て含まれています。多くが本サンプルで再利用されています。
/Expo/Integrations
フォルダでは、ReadyPlayerMeなどとのサードパーティソリューションとの互換性を管理しています。
/Photon
フォルダにはFusionおよびPhoton Voice SDKが含まれています。
/Photon/FusionXRShared
フォルダには、VR sharedサンプルからのリグとグラビングのロジックが含まれ、他のプロジェクトと共有可能なFusionXRShared light SDKを作っています。
/Photon/FusionXRShared/Extensions
フォルダにはFusionXRSharedの拡張が含まれており、同期レイ、ロコモーション検証など再利用できる機能があります。
/Plugins
フォルダにはReady Player Me SDKが含まれています。
/StreamingAssets
フォルダには事前構築されているReadyPlayerMeアバターが含まれています。既に構築されたアバターを使用しない場合は、自由に取り除くことができます。
/XRI
フォルダおよび/XR
フォルダには仮想現実用のコンフィグファイルが含まれています。
アーキテクチャ概要
Fusion Stageは、特にリグ同期について、VR Shared pageで説明したものと同様のコードベースに基づいています。
ここで使用しているグラビングシステムは、VR Shared - Local rig grabbingページで説明した「ローカルリググラビング」実装の代わりです。
このベースのほかに、Expoサンプルなどのサンプルには、FusionXRSharedへの拡張が含まれています。同期レイやロコモーション検証、タッチ、テレポート、スムージング、ゲイジング等の再利用可能な機能を使用するためです。
さらに、Fusion Stageサンプルでは大部分でFusion Expo sampleのコードを共有しています。チャットバブルもその一つです。
備考: Expoサンプルの現在公開されているバージョンは、FusionXRSharedを基にしていません。XRIT統合がデモされたら間もなく更新され、専用個別サンプルで使用可能となり、皆さんが便利なサンプルを見逃さずに済むようになります。それまでの間、Stageサンプルには、個別シーンにFusionXRSharedで更新されたExpoサンプルが含まれます。
ステージ
ステージはvを使用します。これはチャットバブルで使用されていたものと似たようなものです( Fusion Expo sampleを参照ください)。
このゾーンの容量はユーザー1人に限定されています。そのため、プレゼンターが既にステージ上にいると、他の人がステージに来ることはできなくなります。
Voice
ステージゾーンに関連のあるオーディグループは、特別なオーディオグループ「0」で、デフォルトでは全プレイヤーに聞こえるようになっています。
ZoneAudioInterestChanger
はオーディオグループを取扱い、ゾーンへ入る際に切り替えを行い、この特別なグローバルグループを使用するかどうかも判断します。このケースでは、Zone.IsGlobalAudioGroup()
がTrueを返す場合は、ZoneAudioInterestChanger.ManageAudioSources()
で以下を行います。
- このゾーンに入る全てのユーザーのオーディオソースを有効にする
- オーディオソースのスぺシャリゼーションを削除してしまうので、そのユーザーの声はルームのあらゆる個所から聞こえてくるようになる
プレゼンターカメラ
プレゼンターカメラはステージ上のユーザーを追います。これを実行するため、StageZone
クラスがステージゾーンのIZoneListener
リスナとして登録し、カメラを起動してユーザーがステージ上にいる場合に追跡して録画します。
StageZone
は複数のカメラを扱うことができ、トラベリングを起動してそれぞれのプレゼンターを追いかけながら、最も関連のあるものにのみ実際のレンダリングを有効にします。これらのカメラは秒ごとにレンダリングするフレーム数が少なく、StageCamera
クラスでカメラ動作と共に行われます。カメラは、比較的 Transform
のカメラリグに設置され、このトランスフォームのx
軸に沿って動きます。
ユーザーが全てのユーザーに確実に適切に表示されるようにするには、LODGroupはステージ(StageZone.ForceUserLOD()
)に入ってくるあらゆるユーザーに対して無効になり、LODが起動されないようにします。
シート
ユーザーから共有されるデータ量を減らすため、シートについている場合にアバター同期の更新頻度を下げることができます。
これを実行するため、HardwareRig
サブクラスのStageHardwareRig
はシーティングリクエストを受信できます(SeatDetector
クラスにより起動、これはユーザーがシートにテレポートするのを観察するクラス)。ユーザーがシートにつくとインプットの更新頻度が下がります。こうすることによって、StageNetworkRig
NetworkRig
サブクラスがNetworkTransform
ポジションの更新する頻度も減り、送信されるデータ量も減ります。