하위 시스템

MRTK3는 Unity XR 하위 시스템 관리 인프라를 활용하여 음성 및 손 추적과 같은 기능에 대한 플랫폼 간 지원을 제공할 수 있는 확장 가능한 모듈을 작성합니다. 이러한 하위 시스템은 기존 Unity 네이티브 하위 시스템(예: XRMeshSubsystemXRInputSubsystem)과 함께 Unity에 의해 초기화되고 로드됩니다. Unity 하위 시스템의 작동 방식에 대한 설명서를 참조하세요.

철학

MRTK v2에서 "서비스"는 장면 자체의 많은 기능을 제공합니다. 개체를 인스턴스화하고, 개체를 이동하고, 장면 계층 구조를 업데이트합니다. MRTK3에서 하위 시스템은 장면을 명시적으로 수정하지 않습니다. MRTK3 하위 시스템은 데이터, 정보 또는 이벤트의 모듈식 공급자이거나 최종 사용자에 대한 계산을 수행합니다. 장면에 있는 항목이 데이터 입력에 따라 변경되거나 동작해야 하는 경우 데이터에 따라 동작할 별도의 장면 기반 비주얼라이저 구성 요소가 있어야 합니다. 이 분할은 하위 시스템이 장면 변경과 관련하여 비파괴적이며 장면 관련 부작용을 일으키지 않도록 합니다.

MRTK v2는 입력 처리를 위해 시스템 및 서비스를 자유롭게 사용하지만 MRTK3는 일반적으로 플랫폼 간 입력을 위해 OpenXR 및 Unity 입력 시스템을 사용합니다. 그러나 일부 유형의 데이터는 아직 입력 시스템에 의해 래핑되지 않습니다. 이러한 경우 하위 시스템을 통해 플랫폼 간 인터페이스를 제공합니다.

MRTK 하위 시스템 수명 주기

Unity의 인프라에 포함된 하위 시스템 정의는 Start, StopDestroy 같은 간단한 수명 주기 메서드를 제공합니다. 이 정의는 유용한 "tick" 메서드(예: Update, LateUpdateFixedUpdate)를 포함하도록 확장됩니다. MRTKLifecycleManager는 수명 주기 인터페이스를 구현하는 하위 시스템을 관리합니다. 이 수명 주기 관리자는 하위 시스템 아키텍처에 포함된 유일한 MonoBehaviour입니다. 이는 장면의 아무 곳에나 배치할 수 있지만 일반적으로 Rig에 두는 경향이 있습니다.

쿼리

하위 시스템 구현에 대한 쿼리가 직관적이며 성능 기준에 부합합니다.

// Gets the first valid implementation of T that is started and running.
T mySubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<T>();

// Gets the first valid implementation of T, even if it hasn't been started.
T mySubsystem = XRSubsystemHelpers.GetFirstSubsystem<T>();

// If multiple implementations of T are loaded, get all of them.
List<T> allOfThem = new List<T>();
GetAllRunningSubsystemsNonAlloc<T>(allOfThem);

설명자

하위 시스템의 다양한 구현에는 다른 기능이 있을 수 있습니다. 예를 들어 HandsSubsystem의 다양한 구현은 물리적 데이터 또는 합성된 데이터를 보고하는 기능을 지정할 수 있습니다. 이 기능 정보는 하위 시스템 설명자에 저장되며 지정된 구현에 대해 쿼리될 수 있습니다.

// Get the first running hands subsystem.
var handsSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<HandsSubsystem>();

// If we found one...
if (handsSubsystem != null)
{
    // Read the capability information off the implementation's descriptor.
    bool isPhysicalData = handsSubsystem.subsystemDescriptor.IsPhysicalData;
}

Profiles

MRTK 2.x의 프로필과 혼동하지 마세요. MRTK3 하위 시스템 프로필은 만들고 시작하는 하위 시스템을 정의하는 배포 플랫폼별 자산입니다.

Subsystem profiles, as shown in the MRTK project settings view.

해당 확인란이 선택된 하위 시스템은 수명 주기 메서드를 호출할 뿐만 아니라 MRTKLifecycleManager에 의해 만들어지고 시작됩니다. 다양한 프로필을 서로 다른 배포 대상에 할당할 수 있습니다.

여기에 표시되는 하위 시스템은 설치한 패키지에 따라 달라집니다. 패키지가 설치되어 있지 않으면 해당 패키지와 연결된 하위 시스템이 여기에 표시되지 않고 목록이 자동으로 새로 고쳐집니다.

v3 패키지의 일부로 미리 제작된 MRTKProfile이 제공됩니다. 이는 변경할 수 없는 자산입니다. 그러나 실행할 하위 시스템의 사용자 지정 선택을 만들려면 프로젝트 내에서 MRTKProfile 자산을 만들어야 합니다.

Create your own MRTK subsystems

구성

하위 시스템에 구성 개체를 할당하여 동작을 사용자 지정할 수 있습니다.

Configuring a subsystem

이러한 구성 개체는 XRSubsystemHelpers API를 통해 어디서나 액세스할 수 있습니다.

XRSubsystemHelpers.GetConfiguration<TConfig, TSubsystem>()

하위 시스템은 MRTKSubsystemAttribute에서 관련된 구성 형식을 정의합니다. 이와 함께 특성도 구현된 공급자의 구체적인 형식과 함께 여러 메타데이터를 정의합니다. 예를 들어 이는 MRTK Hands Aggregator 하위 시스템이 사용하는 특성입니다.

[MRTKSubsystem(
        Name = "com.microsoft.mixedreality.hands",
        DisplayName = "MRTK Hands Aggregator Subsystem",
        Author = "Microsoft",
        ProviderType = typeof(MRTKAggregator),
        SubsystemTypeOverride = typeof(MRTKHandsAggregatorSubsystem),
        ConfigType = typeof(MRTKHandsAggregatorConfig))]

프로필과 마찬가지로 기본 구성 자산이 제공됩니다. 이는 변경할 수 없으며 편집하려면 프로젝트에 복제해야 합니다. 자산 만들기 메뉴를 통해 새 자산을 만들 수도 있습니다.

New asset creation menu