This document is about: FUSION 2
SWITCH TO

Spaces


Available in the Industries Circle
Circle
Fusion XR prototyping module

空間

空間及對戰配對

各個使用者可以前往的地方被稱為「空間」。 一個使用者可以加入一個公共空間或加入一個私人空間,也就是限制為在相同「群」的所有使用者的空間。

如果在一個給定的空間/群中有太多使用者在一個相同的房間,額外的使用者仍將能夠連線,但是將被更改路徑到一個新的房間。

fusion spaces model

這個邏輯由Fusion對戰配對能力執行。

以遊戲階段屬性來說明一個使用者希望加入的空間及群(注意事項:一個Metaverse屬性也用於在需要時允許更多篩選,但是沒有它的話總體邏輯也是相同的)。然後,由於在給運行器的啟動遊戲引數中沒有提供明確的房間名稱,對戰配對系統將用戶路徑設定到一個匹配空間ID/群ID篩選條件的遊戲階段。如果建立的第一個房間已滿,將建立另一個房間並且其他使用者將加入它,這樣就可以處理擁擠的空間,而不會封鎖更多使用者的連線。

fusion crowded space example

這個邏輯由SpaceRoom類別處理,其設置ConnectionManager,這樣的話它使用遊戲階段屬性而非一個房間名稱。

切換群

SpaceRoom也處理群切換:當使用者希望加入一個私人群(或希望離開一個私人群以加入公共群),SpaceRoom以這個方式處理它:

  • 它將被請求的群ID儲存在Playerprefs
  • 它將使用者目前位置儲存在PlayerPrefs中(透過SceneSpawnManager元件)
  • 它淡出檢視
  • 它重新載入場景
  • 在對戰配對API中SpaceRoom提供ConnectionManager將被使用的群ID為一個遊戲階段屬性
  • 在場景載入期間,使用者由SceneSpawnManager元件放在它們先前已儲存的位置

空間說明

空間ID可以在檢查器中的SpaceRoom元件上設定。或是可以準備及提供一個SpaceDescription

SpaceDescription是一個可指令碼物件,有著以下的欄位:

  • spaceId:技術資料欄位以唯一地識別各個空間,並且在SpaceRoom元件中填入遊戲階段屬性,該屬性將使用者路徑設定到這個空間的一個適當的Fusion房間。
  • sceneName:當玩家加入這個空間時必須載入的Unity場景。
  • spaceName:空間的名稱。在空間之間的傳送入口的面板上載入它。它不是用作為一個ID,而只是一個呈現文字。
  • spaceDescription:空間的說明。在空間之間的傳送入口的面板上載入它,以向玩家說明目標空間的目的。
  • spaceParam:可選的技術資料。針對未來的使用,當多個空間使用相同的場景時,來提供參數到一個場景。
  • spaceSecondaryParam:可選的技術資料。針對未來的使用,當多個空間使用相同的場景時,來提供參數到一個空間。

加入另一個空間

加入另一個空間是由SpaceLoader元件來處理。可以在它上面提供一個完整的SpaceDescription,或針對較簡單的需要的一個空間ID字串。

為了知道要載入哪個Unity場景,SpaceLoader可以讀取在其SpaceDescription欄位中提供的場景。或者針對更簡單的案例,它推定場景名稱與直接提供的空間ID字串相同。

當調用它的SwitchScene()方法,透過載入目標場景,發生空間改變。這個方法:

  • 首先關閉目前的運行器
  • 記錄在使用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);
}

當來自另一個空間時生成點

如果autoRegisterAsReturnPoint為真,SpaceLoader元件也可以提供一個returnPosition,以在直接載入中心場景時,以及在玩家在加入另一個場景後回來時區分玩家生成位置。

當使用者正在加入目前場景(關聯到空間A),其在SpaceLoader的目標空間(空間B)之後,使用者將在與通往空間B的這個SpaceLoader關聯的returnPosition轉換處生成。這是透過將與空間B關聯的這個傳回位置,提供給處理使用者生成位置的SceneSpawnManager來完成的。

相依性

  • 連線管理器附加元件

示範

為了描繪用途,可以在Assets\Photon\FusionAddons\Spaces\Demo\Scenes\資料夾中找到示範場景。

各個場景含有兩個入口,在使用者進入入口時,各個入口利用SpaceLoader元件來載入一個新的Space。 同時,PortalSpaceDescriptionLoader指令碼在入口面板上顯示空間屬性。

fusion industries addon spaces

下載

這個附加元件的最新版本被包含在附加元件專案之中

已支援拓撲

  • 共享模式

更改記錄

  • 版本2.0.0:支援Fusion 2.0
  • 版本1.0.3:更改示範指令碼名稱
  • 版本1.0.2:連線管理器命名空間調整帶來的修正
  • 版本1.0.1:新增示範場景+新增命名空間
  • 版本1.0.0:第一個版本
Back to top