This document is about: FUSION 2
SWITCH TO

스페이스


Available in the Industries Circle
Circle
Fusion XR prototyping module

스페이스

스페이스 및 매치메이킹

사용자가 갈 수 있는 각 장소를 "스페이스"라고 합니다.
사용자는 공용 스페이스에 가입하거나 개인 스페이스, 즉 동일한 "그룹"에 있는 모든 사용자로 제한된 스페이스에 가입할 수 있습니다.

지정된 스페이스/그룹 쌍에 대해 동일한 룸에 너무 많은 사용자가 있는 경우 추가 사용자는 여전히 연결할 수 있지만 새 룸으로 라우팅 됩니다.

Fusion 스페이스 모델

이 로직은 Fusion 매치메이킹 기능으로 구현됩니다.

사용자가 가입하고자 하는 스페이스와 그룹은 세션 속성(노트: 메타버스 속성은 필요한 경우 더 많은 필터링을 허용하기 위해 사용되기도 하지만, 메타버스 속성이 없으면 전체 로직은 동일합니다.). 그런 다음, 플레이어에게 주어진 시작 게임 인수에 명시적인 룸 이름이 제공되지 않으므로, 매치메이킹 시스템은 스페이스 ID/그룹 ID 필터와 일치하는 세션으로 사용자를 이동시킵니다. 만약 생성된 첫 번째 룸이 꽉 차면, 다른 룸이 생성되고 다른 사용자들이 이 룸에 가입하여 더 이상 사용자들의 연결을 방해하지 않고 혼잡한 스페이스를 처리할 수 있습니다.

Fusion 꽉 찬 스페이스 예제

이 논리는 SpaceRoom 클래스에서 처리되며, 이 클래스는 ConnectionManager를 구성하여 룸 이름 대신 세션 속성을 사용합니다.

그룹 스위칭

SpaceRoom은 또한 그룹 전환 처리합니다: 사용자가 개인 그룹에 가입하기를 원할 때(또는 개인 그룹을 떠나 공용 그룹에 가입하기를 원할 때):

  • 요청한 그룹 ID를 Playerprefs에 저장합니다
  • 사용자의 현재 위치를 PlayerPrefs(SceneSpawnManager 컴포넌트를 통해)에 저장합니다
  • 뷰를 페이드아웃 합니다
  • 씬들을 재로드합니다
  • SpaceRoomConnectionManager에게 매치메이킹 API에서 세션 속성으로 사용할 그룹 ID를 제공합니다
  • 씬 로딩 중에 사용자는 SceneSpawnManager 컴포넌트에 의해 이전에 저장된 위치에 배치됩니다

SpaceDescription

Space id는 인스펙터의 SpaceRoom 컴포넌트에 설정하거나 SpaceDescription을 작성하여 제공할 수 있습니다.

SpaceDescription은 스크립트로 작성 가능한 객체로, 다음과 같은 필드가 있습니다:

  • spaceId : 기술 데이터 필드는 각 스페이스를 고유하게 식별하고, 사용자를 이 스페이스에 적합한 Fusion 룸으로 라우팅할 세션 속성을 SpaceRoom 컴포넌트에 입력합니다.
  • sceneName : 플레이어가 이 스페이스에 합류할 때 반드시 로드해야 하는 유니티 씬.
  • spaceName : 스페이스의 이름입니다. 스페이스 사이의 포털 패널에 표시됩니다. id로 사용되지 않고 그냥 프레젠테이션 텍스트로 사용됩니다.
  • spaceDescription : 스페이스에 대한 설명입니다. 사용자에게 대상 스페이스의 목적을 설명하기 위해 스페이스 사이의 포털 패널에 로드됩니다.
  • spaceParam : 선택적인 기술 데이터. 여러 스페이스가 동일한 씬을 사용할 때 해당 씬에 파라미터를 제공하기 위해 미래에 사용할 수 있습니다.
  • spaceSecondaryParam : 선택적인 기술 데이터. 여러 스페이스가 동일한 씬을 사용할 때 해당 씬에 파라미터를 제공하기 위해 미래에 사용할 수 있습니다.

다른 스페이스에 참가하기

다른 스페이스에 참가하는 것은 SpaceLoader 컴포넌트에 의해 처리됩니다. SpaceDescription 전체를 제공하거나 단순한 필요를 위해 Space ID 문자열을 제공할 수 있습니다.

어떤 유니티 씬을 로드할지 알려면 SpaceLoaderSpaceDescription 필드에 제공된 씬을 읽을 수 있습니다. 또는 간단한 경우에는 씬 이름이 직접 제공된 Space ID 문자열과 동일하다고 가정합니다.

SwitchScene() 메소드가 호출되면 대상 씬을 로드하여 스페이스 변경이 발생합니다:

  • 먼저 현재 러너를 종료합니다
  • 요청한 SpaceRoom.RegisterSpaceRequest()를 사용하여 SpaceDescription을 기록합니다. 그러면 들어오는 씬의 SpaceRoom 스페이스 설명이 무시되고 이를 유도한 SpaceLoader에 저장된 SpaceDescription과 정확하게 일치하는지 확인하기 위해 변경됩니다. 이는 현재 샘플 상태와 같은 단순한 스페이스 구성에는 필요하지 않지만 하나의 유니티 씬을 여러 스페이서에 사용하는 보다 발전된 시나리오를 가능하게 합니다.
  • 그런 다음 새 유니티 씬을 로드합니다.

C#

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

다른 스페이스에서 왔을 때 포인트 스폰

SpaceLoader 컴포넌트는 또한 autoRegisterAsReturnPoint가 true인 경우 returnPosition을 제공하여 허브 씬을 직접 로드할 때와 다른 씬에 참여한 후 다시 돌아올 때 플레이어의 스폰 위치를 구분할 수 있습니다.

사용자가 현재 씬(스페이스 A 관련)에 합류할 때 SpaceLoader가 목표로 하는 스페이스(스페이스 B)에 도착한 직후에 SpaceLoader와 관련된 리턴 위치 변환에서 스폰 됩니다. 이는 공간 B와 관련된 리턴 위치를 사용자의 스폰 위치를 처리하는 SceneSpawnManager에 제공함으로써 수행됩니다.

의존성

  • ConnexionManager 애드온

데모

사용법을 설명하기 위해 데모 씬은 Assets\Photon\FusionAddons\Spaces\Demo\Scenes\ 폴더에서 확인할 수 있습니다.

각 씬에는 두 개의 포털이 포함되어 있으며 플레이어가 SpaceLoader 컴포넌트 덕분에 이 포털에 들어가면 각 포털은 새로운 Space를 로드합니다.
또한 PortalSpaceDescriptionLoader 스크립트는 스페이스 속성을 포털 패널에 표시합니다.

Fusion 인더스트리 애드온 스페이스

다운로도

이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.

지원하는 토폴로지

  • 공유 모드

변경 내역

  • 버전 2.0.0: Fusion 2.0 지원
  • 버전 1.0.3: 데모 스크립트 이름 변경
  • 버전 1.0.2: ConnectionManager 네임스페이스 변경으로 인한 수정
  • 버전 1.0.1: 데모씬 추가 + 네임스페이스 추가
  • 버전 1.0.0: 최초 릴리즈
Back to top