This document is about: FUSION 1
SWITCH TO

수정중인 페이지 입니다.

스페이스


Available in the Industries Circle
Circle
Fusion XR 프로토타이핑 모듈

스페이스

스페이스 그리고 매치메이킹

사용자가 갈 수 있는 각각의 장소를 "스페이스"라고 부릅니다.
사용자는 공용 스페이스에 참여하거나 같은 "그룹"에 속한 모든 사용자로 제한된 스페이스인 개인 스페이스에 참여할 수 있습니다.

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

Fusion Spaces model

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

사용자가 가입하고자 하는 스페이스 및 그룹은 세션 속성으로 설명됩니다(참고: 메타버스 속성을 사용하여 필요한 경우 더 많은 필터링이 가능하지만, 전체 로직은 동일). 그러면, 러너에게 주어진 시작 게임 인수에 명시적인 룸 이름이 제공되지 않으므로, 매치메이킹 시스템은 공간 id/group id 필터와 일치하는 세션으로 사용자를 라우팅합니다. 처음 만들어진 룸이 꽉 차면 다른 룸이 생성되고 다른 사용자가 참여하여 더 이상의 사용자가 연결하지 못하도록 방지하면서 혼잡한 스페이스를 처리할 수 있습니다.

Fusion 꽉찬 스페이스 예제

이 로직은 룸 이름 대신 세션 속성을 사용하도록 ConnectionManager를 구성하는 SpaceRoom 클래스에서 처리됩니다.

그룹 스위칭

SpaceRoom은 또한 그룹 전환을 처리합니다: 사용자가 개인 그룹에 참여하고 싶을 때(또는 개인 그룹을 떠나 공개 그룹에 참여하고 싶을 때), SpaceRoom은 다음과 같은 방식으로 처리합니다:

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

SpaceDescription

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

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

  • spaceId : 각 공간을 고유하게 식별하고, 이 공간에 적합한 퓨전 룸으로 사용자를 라우팅할 세션 속성을 'SpaceRoom' 구성 요소에 채우는 기술 데이터 필드.
  • sceneName : 플레이어가 이 스페이스에 합류할 때 반드시 로드해야 하는 유니티 씬.
  • spaceName : 스페이스의 이름. 스페이스 사이의 포탈 패널에 로드됩니다. ID로 사용되지 않고 프레젠테이션 텍스트로만 사용됩니다.
  • spaceDescription : 스페이스에 대한 설명. 스페이스 사이의 포탈 패널에 적재되어 사용자에게 대상 스페이스의 용도를 설명합니다.
  • spaceParam : 선택적인 기술 데이터. 여러 스페이스에서 동일한 씬을 사용할 때 씬에 파라미터를 제공하기 위해 나중에 사용합니다.
  • spaceSecondaryParam : 선택적인 기술 데이터. 여러 스페이스에서 동일한 씬을 사용할 때 씬에 파라미터를 제공하기 위해 사용됩니다.

다른 스페이스에 참여

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

어떤 유니티 씬을 로드할지 알기 위해, SpaceLoaderSpaceDescription 필드에 제공된 씬을 읽을 수 있습니다. 또는, 단순한 경우에는 씬 이름이 직접 제공된 space id 문자열과 동일하다고 가정합니다.

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

  • 먼저 현재 Runner를 종료합니다
  • 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)에 있는 직후에, 사용자는 스페이스 B로 이어지는 스페이스 로더와 관련된 returnPosition 트랜스폼에서 스폰 됩니다. 이는 스페이스 B와 관련된 리턴 위치를 사용자 스폰 위치를 처리하는 SceneSpawnManager에 제공함으로써 수행됩니다.

데모

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

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

Fusion Industries 애드온 스페이스

다운로드

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

지원하는 토폴로지

  • 공유 모드

변경 내역

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