// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #if UNITY_2019_3_OR_NEWER using System.Collections.Generic; using UnityEngine; using UnityEngine.XR; #else #if UNITY_2019_2_OR_NEWER using UnityEngine.XR; #endif using UnityEngine.Experimental.XR; #endif namespace Microsoft.MixedReality.Toolkit.Utilities { /// /// A helper class to provide easier access to active Unity XR SDK subsystems. /// /// These properties are only valid for the XR SDK pipeline. public static class XRSubsystemHelpers { private static XRInputSubsystem inputSubsystem = null; #if UNITY_2019_3_OR_NEWER private static readonly List XRInputSubsystems = new List(); #endif // UNITY_2019_3_OR_NEWER /// /// The XR SDK input subsystem for the currently loaded XR plug-in. /// public static XRInputSubsystem InputSubsystem { get { #if UNITY_2019_3_OR_NEWER if (inputSubsystem == null || !inputSubsystem.running) { inputSubsystem = null; SubsystemManager.GetInstances(XRInputSubsystems); foreach (XRInputSubsystem xrInputSubsystem in XRInputSubsystems) { if (xrInputSubsystem.running) { inputSubsystem = xrInputSubsystem; break; } } } #endif // UNITY_2019_3_OR_NEWER return inputSubsystem; } } private static XRMeshSubsystem meshSubsystem = null; #if UNITY_2019_3_OR_NEWER private static readonly List XRMeshSubsystems = new List(); #endif // UNITY_2019_3_OR_NEWER /// /// The XR SDK mesh subsystem for the currently loaded XR plug-in. /// public static XRMeshSubsystem MeshSubsystem { get { #if UNITY_2019_3_OR_NEWER if (meshSubsystem == null || !meshSubsystem.running) { meshSubsystem = null; SubsystemManager.GetInstances(XRMeshSubsystems); foreach (XRMeshSubsystem xrMeshSubsystem in XRMeshSubsystems) { if (xrMeshSubsystem.running) { meshSubsystem = xrMeshSubsystem; break; } } } #endif // UNITY_2019_3_OR_NEWER return meshSubsystem; } } private static XRDisplaySubsystem displaySubsystem = null; #if UNITY_2019_3_OR_NEWER private static readonly List XRDisplaySubsystems = new List(); #endif // UNITY_2019_3_OR_NEWER /// /// The XR SDK display subsystem for the currently loaded XR plug-in. /// public static XRDisplaySubsystem DisplaySubsystem { get { #if UNITY_2019_3_OR_NEWER if (displaySubsystem == null || !displaySubsystem.running) { displaySubsystem = null; SubsystemManager.GetInstances(XRDisplaySubsystems); foreach (XRDisplaySubsystem xrDisplaySubsystem in XRDisplaySubsystems) { if (xrDisplaySubsystem.running) { displaySubsystem = xrDisplaySubsystem; break; } } } #endif // UNITY_2019_3_OR_NEWER return displaySubsystem; } } } }