This document is about: FUSION 2
SWITCH TO

구독자 - 레지스트리(Subscriber - Registry)


Available in the Industries Circle
Circle
Fusion XR 프로토타이핑 애드온

이 모듈은 등록/구독(registry/subscriber) 시스템을 구현할 수 있도록 일부 기본 클래스를 제공합니다.
이를 통해 원격 오브젝트의 가용성(스폰 및 사용자 정의 조건 기반)을 추적할 수 있으며, 오브젝트 생성 순서를 투명하게 관리할 수 있습니다.

이 시스템은 다음을 보장합니다:

  • 구독자가 하나 이상의 중앙 레지스트리에 등록될 때, 모든 클라이언트에 알림이 전송됩니다.
  • 구독자의 등록/해제는 IsAvailable 속성에 따라 결정됩니다. (등록은 사용 가능할 때만 가능하며, 기본적으로 사용 불가가 되면 등록 해제됩니다.)
  • IsAvailable 속성은 네트워크로 동기화되지 않지만, 보통 네트워크 동기화된 값에 기반하여 설정해야 모든 클라이언트에서 동시에 등록/해제가 일어납니다.

핵심 로직

일반적인 사용 흐름은 다음과 같습니다:

  • 씬에는 레지스트리가 네트워크 오브젝트로 존재합니다.
  • 플레이어가 접속할 때마다 구독자 오브젝트가 스폰 됩니다.
  • 레지스트리와 구독자의 스폰 순서는 항상 동일하지 않습니다.
  • Subscriber/Registry 클래스가 이 순서에 상관없이 올바르게 연결될 수 있도록 보장합니다.

구독자가 레지스트리에 등록되기 위해 필요한 조건은:

  1. 스폰 된 상태여야 하고,
  2. 필요시 추가 사용자 정의 조건도 충족해야 합니다.

이 애드온의 목표는 다음 순서가 어떻게 일어나든 결과가 동일하도록 만드는 것입니다:

  1. 레지스트리가 스폰 됨
  2. 구독자가 스폰 됨
  3. 레지스트리가 사용 가능 상태가 됨
  4. 구독자가 사용 가능 상태가 됨
  5. 구독자가 레지스트리에 등록됨
  6. 콜백이 트리거 되고, 다른 리스너들에게 알림 전송

기본 클래스

Subscriber<T>Registry<T>는 제네릭(generic) 클래스입니다.
여러 서브클래스가 하나의 앱 안에 공존할 수 있도록 설계되었습니다.

  • T 타입은 Subscriber<T>의 서브클래스 자신이어야 합니다.
    예: class SampleSubscriber : Subscriber<SampleSubscriber> {}

Subscriber

Subscriber<T> 서브클래스는, 자신과 레지스트리가 모두 IsAvailable = true가 되면 레지스트리에 등록합니다.
IsAvailable의 기준은 반드시 네트워크를 통해 동기화되어야 모든 클라이언트에서 동시 트리거가 가능합니다.

등록 알림을 받으려면 OnRegisterOnRegistry(IRegistry<T> registry) / OnUnregisterOnRegistry(IRegistry<T> registry)를 오버라이드 하거나,
또는 RegistryListener<T>를 구현하여 리스너로 등록할 수 있습니다.

서브클래스 예시:

C#

// When CustomAvailabilityCriteriaMatched will be set to true, the SampleSubscriber registration will trigger
class SampleSubscriber : Subscriber<SampleSubscriber> {
    // Custom availability criteria
    [Networked]
    bool CustomAvailabilityCriteriaMatched { get; set; } = false;

    // Availability override. The data to compute it needs to be synched so that the availability triggers everywhere (and hence the registration)
    public override bool IsAvailable => base.IsAvailable && CustomAvailabilityCriteriaMatched;
}

Registry

Registry<T>T(Subscriber 서브클래스)의 등록을 수신합니다.
등록은 구독자와 레지스트리 모두 IsAvailable = true일 때만 발생합니다.

등록/해제 알림을 받으려면 OnSubscriberRegistration/OnSubscriberUnregistration을 오버라이드 하거나,
IRegistryListener<T>를 구현한 컴포넌트를 통해 리스너로 등록할 수 있습니다.

서브클래스 예시:

C#

class SampleRegistry : Registry<SampleSubscriber> {}

서브클래스 생성하기

Subscriber<T> 서브클래스는 동일한 T 타입의 Registry<T>에 자동으로 등록됩니다.

만약 등록 대상을 더욱 제한하고 싶다면 RegistryType() 메서드를 오버라이드 해서 특정 레지스트리 타입만 허용할 수 있습니다.

또한, 등록/해제 콜백 외에 OnAvailableRegistryFound(Registry<T> registry)를 오버라이드 하면,
레지스트리가 사용 가능 상태가 되었을 때 추가 알림을 받을 수 있습니다.

데모

데모 씬은 Assets\Photon\FusionAddons\SubscriberRegistry\Demo\ 폴더에 있습니다.

  • 이 씬에는 여러 레지스트리와 구독자가 존재합니다.
  • 서로 다른 타이밍에 활성화되어도 등록 프로세스가 자연스럽게 동작하는 것을 보여줍니다.

의존성

  • XRShared 애드온

다운로드

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

지원 토폴로지

  • 공유 모드

변경 기록

  • 버전 2.0.0: 첫 번째 릴리스
Back to top