Spaces
空間
空間及對戰配對
各個使用者可以前往的地方被稱為「空間」。
一個使用者可以加入一個公共空間或加入一個私人空間,也就是限制為在相同「群」的所有使用者的空間。
如果在一個給定的空間/群中有太多使用者在一個相同的房間,額外的使用者仍將能夠連線,但是將被更改路徑到一個新的房間。
這個邏輯由Fusion對戰配對能力執行。
以遊戲階段屬性來說明一個使用者希望加入的空間及群(注意事項:一個Metaverse屬性也用於在需要時允許更多篩選,但是沒有它的話總體邏輯也是相同的)。然後,由於在給運行器的啟動遊戲引數中沒有提供明確的房間名稱,對戰配對系統將用戶路徑設定到一個匹配空間ID/群ID篩選條件的遊戲階段。如果建立的第一個房間已滿,將建立另一個房間並且其他使用者將加入它,這樣就可以處理擁擠的空間,而不會封鎖更多使用者的連線。
這個邏輯由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
指令碼在入口面板上顯示空間屬性。
下載
這個附加元件的最新版本被包含在附加元件專案之中
已支援拓撲
- 共享模式
更改記錄
- 版本2.0.0:支援Fusion 2.0
- 版本1.0.3:更改示範指令碼名稱
- 版本1.0.2:連線管理器命名空間調整帶來的修正
- 版本1.0.1:新增示範場景+新增命名空間
- 版本1.0.0:第一個版本