This document is about: FUSION 2
SWITCH TO

Spaces


Available in the Industries Circle
Circle
Fusion XR プロトタイピングモジュール

Spaces

スペースとマッチメイキング

ユーザーが行ける各場所は「スペース」と呼ばれます。
ユーザーは、パブリックスペースかプライベートスペース(同じ「グループ」のユーザーに制限されたスペース)に参加します。

あるスペース/グループに対して、同じルームのユーザーが多すぎる場合は、新規ユーザーは新しいルームに接続されます。

Fusion Spaces model

このロジックは、Fusionのマッチメイキングで実装されています。

ユーザーが参加するスペースとグループは、セッションプロパティ(備考:metaverseプロパティは必要に応じた詳細なフィルタリングに使用されますが、全体のロジックは同様です)で表されます。そして、NetworkRunnerStartGameArgsで明示的なルーム名を指定しなければ、マッチメイキングシステムによって、スペースID/グループIDでフィルタリングされたセッションにユーザーが参加します。作成された最初のルームが満員なら、他のユーザーが参加できるように別のルームが作成されるため、ユーザーの接続を失敗させることなく混雑したスペースを管理できます。

Fusion Crowded Space Example

このロジックはSpaceRoomクラスで制御され、ConnectionManagerを調整して、ルーム名のかわりにセッションプロパティを使用します。

グループの切り替え

SpaceRoomは、グループの切り替えも制御します。ユーザーがプライベートグループに参加したい時(または、プライベートグループを退出して、パブリックグループに参加する時)、SpaceRoomは以下のように動作します。

  • リクエストされたグループIDをPlayerPrefsに保存する
  • PlayerPrefsにユーザーの現在位置を保存する(SceneSpawnManagerコンポーネントを通して)
  • ビューをフェードアウトする
  • シーンをリロードする
  • SpaceRoomConnectionManagerにグループIDを渡し、マッチメイキングAPIのセッションプロパティに使用される
  • シーンロード中、ユーザーはSceneSpawnManagerコンポーネントによって先ほど保存した位置に移動する

SpaceDescription

スペースIDは、SpaceRoomコンポーネントのインスペクター上から設定するか、SpaceDescriptionを用意して設定することが可能です。

SpaceDescriptionScriptableObjectで、以下のフィールドを持ちます。

  • spaceId:各スペースを識別するユニークなデータフィールドで、SpaceRoomコンポーネントでは、ユーザーを適切なFusionのルームに参加させるためのセッションプロパティになります。
  • sceneName:プレイヤーがこのスペースに参加した時にロードされるUnityのシーンです。
  • spaceName:スペース名です。スペース間のポータルのパネルでロードされます。IDではなく、表示用テキストとして使用されます。
  • spaceDescription:スペースの説明です。スペース間のポータルのパネルでロードされます。ユーザーに対象のスペースの目的を説明します。
  • spaceParam:オプションのデータです。活用例としては、複数のスペースが同じシーンを使用している時にシーンにパラメーターを渡すなどです。
  • spaceSecondaryParam:オプションのデータです。活用例としては、複数のスペースが同じシーンを使用している時にシーンにパラメーターを渡すなどです。

別のスペースへの参加

別のスペースへの参加は、SpaceLoaderコンポーネントで制御されます。完全なSpaceDescriptionを渡すか、単純にスペースIDの文字列を渡すかが可能です。

SpaceLaoderがどのUnityシーンをロードするかを知るには、SpaceDescriptionフィールドで与えられるシーンを読み込むか、シーン名がスペースIDと同じ文字列であると仮定することになります。

SwitchScene()メソッドが呼び出されると、スペース変更が発生し、対象シーンのロードが行われます。

  • 最初に現在のNetworkRunnerShutdownする
  • SpaceRoom.RegisterSpaceRequest()を使用して、リクエストされたSpaceDescriptionを記録する。遷移先シーンのSpaceRoomのスペースの説明は無視され、SpaceLoaderに保存されたSpaceDescriptionに合わせるように変更されます。これはこのサンプルのような設定のシンプルなスペースでは必要ありませんが、単一のUnityシーンが複数のスペースで使用されているような実践的なシナリオでは有効です。
  • それから、新しいUnityのシーンをロードする

C#

private async void SwitchScene()
{
...
    await runner.Shutdown(true);
    Debug.Log("Loading new scene " + SceneName);
    SpaceRoom.RegisterSpaceRequest(spaceDescription);
    SceneManager.LoadScene(SceneName, LoadSceneMode.Single);
}

別のスペースから遷移した場合のスポーン地点

SpaceLoaderコンポーネントは、autoRegisterAsReturnPointtrueの場合に、returnPoisitionを提供することもできます。これによって、Hubシーンから直接ロードされた時と、別のシーンから戻ってきた時とのスポーン地点を差別化できます。

あるユーザーが現在のシーン(スペースA)に参加する際に、直前まで別のスペース(スペースB)にいたことがSpaceLoaderに設定されていたら、ユーザーはスペースBに繋がるSpaceLaoderreturnPositionの位置にスポーンします。このスペースBに関連したreturnPositionSceneSpawnManagerから与えられ、ユーザーのスポーン位置を制御します。

依存関係

  • ConnectionManagerアドオン

デモ

使用方法を示すデモシーンはAssets\Photon\FusionAddons\Spaces\Demo\Scenes\フォルダーにあります。

各シーンには2つのポータルがあり、各ポータルはSpaceLaoderコンポーネントによって、プレイヤーが中に入る時に新しいSpaceをロードします。
またPortalSpaceDescriptionLoaderスクリプトは、ポータルパネル上でスペースのプロパティを表示します。

Fusion Industries Addon Spaces

ダウンロード

このアドオンの最新バージョンは、Industries アドオンのプロジェクトに含まれています。

対応するトポロジー

  • 共有モード

更新履歴

  • Version 2.0.0: Fusion 2.0 support
  • Version 1.0.3: Change demo scripts name
  • Version 1.0.2: Fix because of ConnectionManager namespace modification
  • Version 1.0.1: Add demo scene + add namespace
  • Version 1.0.0: First release
Back to top