using System.Collections.Generic; using UnityEngine.XR.ARSubsystems; using UnityEngine.XR.Management; namespace UnityEngine.XR.ARKit { public class ARKitLoader : XRLoaderHelper { private static List s_SessionSubsystemDescriptors = new List(); private static List s_CameraSubsystemDescriptors = new List(); private static List s_DepthSubsystemDescriptors = new List(); private static List s_PlaneSubsystemDescriptors = new List(); private static List s_AnchorSubsystemDescriptors = new List(); private static List s_RaycastSubsystemDescriptors = new List(); private static List s_EnvironmentProbeSubsystemDescriptors = new List(); private static List s_InputSubsystemDescriptors = new List(); private static List s_ImageTrackingSubsystemDescriptors = new List(); private static List s_FaceSubsystemDescriptors = new List(); public XRSessionSubsystem sessionSubsystem { get { return GetLoadedSubsystem(); } } public XRCameraSubsystem cameraSubsystem { get { return GetLoadedSubsystem(); } } public XRDepthSubsystem depthSubsystem { get { return GetLoadedSubsystem(); } } public XRPlaneSubsystem planeSubsystem { get { return GetLoadedSubsystem(); } } public XRAnchorSubsystem anchorSubsystem { get { return GetLoadedSubsystem(); } } public XRRaycastSubsystem raycastSubsystem { get { return GetLoadedSubsystem(); } } public XREnvironmentProbeSubsystem environmentProbeSubsystem { get { return GetLoadedSubsystem(); } } public XRInputSubsystem inputSubsystem { get { return GetLoadedSubsystem(); } } public XRImageTrackingSubsystem imageTrackingSubsystem { get { return GetLoadedSubsystem(); } } public XRFaceSubsystem faceSubsystem { get { return GetLoadedSubsystem(); } } public override bool Initialize() { #if UNITY_IOS && !UNITY_EDITOR CreateSubsystem(s_SessionSubsystemDescriptors, "ARKit-Session"); CreateSubsystem(s_CameraSubsystemDescriptors, "ARKit-Camera"); CreateSubsystem(s_DepthSubsystemDescriptors, "ARKit-Depth"); CreateSubsystem(s_PlaneSubsystemDescriptors, "ARKit-Plane"); CreateSubsystem(s_AnchorSubsystemDescriptors, "ARKit-Anchor"); CreateSubsystem(s_RaycastSubsystemDescriptors, "ARKit-Raycast"); CreateSubsystem(s_EnvironmentProbeSubsystemDescriptors, "ARKit-EnvironmentProbe"); CreateSubsystem(s_InputSubsystemDescriptors, "ARKit-Input"); // Optional subsystems that might not have been registered, based on the iOS version. CreateSubsystem(s_ImageTrackingSubsystemDescriptors, "ARKit-ImageTracking"); CreateSubsystem(s_FaceSubsystemDescriptors, "ARKit-Face"); if (sessionSubsystem == null) { Debug.LogError("Failed to load session subsystem."); } return sessionSubsystem != null; #else return false; #endif } public override bool Start() { StartSubsystem(); StartSubsystem(); StartSubsystem(); return true; } public override bool Stop() { StopSubsystem(); StopSubsystem(); StopSubsystem(); return true; } public override bool Deinitialize() { #if UNITY_IOS && !UNITY_EDITOR DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); #endif return true; } } }