using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARSubsystems; using UnityEngine.XR.Management; #if UNITY_EDITOR using UnityEditor; using UnityEditor.XR.Management; #endif using ARKitStream.Internal; namespace ARKitStream { #if UNITY_EDITOR [XRSupportedBuildTarget(BuildTargetGroup.Standalone, new BuildTarget[] { BuildTarget.StandaloneOSX, BuildTarget.StandaloneWindows64 })] #endif public class ARKitStreamLoader : XRLoaderHelper { static List s_SessionSubsystemDescriptors = new List(); static List s_CameraSubsystemDescriptors = new List(); // static List s_DepthSubsystemDescriptors = new List(); static List s_PlaneSubsystemDescriptors = new List(); // static List s_AnchorSubsystemDescriptors = new List(); // static List s_RaycastSubsystemDescriptors = new List(); static List s_HumanBodySubsystemDescriptors = new List(); // static List s_EnvironmentProbeSubsystemDescriptors = new List(); // static List s_InputSubsystemDescriptors = new List(); // static List s_ImageTrackingSubsystemDescriptors = new List(); // static List s_ObjectTrackingSubsystemDescriptors = new List(); static List s_FaceSubsystemDescriptors = new List(); static List s_OcclusionSubsystemDescriptors = new List(); // static List s_ParticipantSubsystemDescriptors = new List(); // static List s_MeshSubsystemDescriptors = new List(); public override bool Initialize() { // if (!Application.isPlaying) return false; #if UNITY_EDITOR CreateSubsystem(s_SessionSubsystemDescriptors, ARKitSessionRemoteSubsystem.ID); CreateSubsystem(s_CameraSubsystemDescriptors, ARKitCameraRemoteSubsystem.ID); // CreateSubsystem(s_DepthSubsystemDescriptors, "ARKit-Depth"); CreateSubsystem(s_PlaneSubsystemDescriptors, ARKitXRPlaneRemoteSubsystem.ID); // CreateSubsystem(s_AnchorSubsystemDescriptors, "ARKit-Anchor"); // CreateSubsystem(s_RaycastSubsystemDescriptors, "ARKit-Raycast"); CreateSubsystem(s_HumanBodySubsystemDescriptors, ARKitHumanBodyRemoteSubsystem.ID); // 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_ObjectTrackingSubsystemDescriptors, "ARKit-ObjectTracking"); CreateSubsystem(s_FaceSubsystemDescriptors, ARKitFaceRemoteSubsystem.ID); CreateSubsystem(s_OcclusionSubsystemDescriptors, ARKitOcclusionRemoteSubsystem.ID); // CreateSubsystem(s_ParticipantSubsystemDescriptors, "ARKit-Participant"); // CreateSubsystem(s_MeshSubsystemDescriptors, "ARKit-Meshing"); #endif Debug.Log("ARKitStreamLoader Initialize"); var sessionSubsystem = GetLoadedSubsystem(); if (sessionSubsystem == null) { Debug.LogError("Failed to load session subsystem."); } return sessionSubsystem != null; } public override bool Start() { return true; } public override bool Stop() { return true; } public override bool Deinitialize() { if (!Application.isPlaying) { // return base.Deinitialize(); }; #if UNITY_EDITOR DestroySubsystem(); // DestroySubsystem(); DestroySubsystem(); // DestroySubsystem(); // DestroySubsystem(); DestroySubsystem(); // DestroySubsystem(); // DestroySubsystem(); // DestroySubsystem(); // DestroySubsystem(); DestroySubsystem(); DestroySubsystem(); // DestroySubsystem(); // DestroySubsystem(); DestroySubsystem(); #endif Debug.Log("ARKitStreamLoader Deinitialize"); return base.Deinitialize(); } } }