private IAnchorManager SelectAnchorManager(IPlugin plugin, IHeadPoseTracker headTracker) { Debug.Log($"Select {shared.anchorSettings.anchorSubsystem} anchor manager."); if (AnchorManager != null) { Debug.Log("Creating new anchormanager, but have old one. Reseting it before replacing."); AnchorManager.Reset(); } var anchorSettings = shared.anchorSettings; #if WLT_ARFOUNDATION_PRESENT if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.DONT_USE) { Debug.Log($"Trying to create ARF anchor manager on {anchorSettings.ARSessionSource.name} and {anchorSettings.ARSessionOriginSource.name}"); AnchorManagerARF arfAnchorManager = AnchorManagerARF.TryCreate(plugin, headTracker, anchorSettings.ARSessionSource, anchorSettings.ARSessionOriginSource); if (arfAnchorManager != null) { Debug.Log("Success creating ARF anchor manager"); return(arfAnchorManager); } Debug.Log("Failed to create requested AR Foundation anchor manager!"); } #endif // WLT_ARFOUNDATION_PRESENT #if WLT_ARSUBSYSTEMS_PRESENT if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.XRSDK) { Debug.Log($"Trying to create XR anchor manager"); AnchorManagerXR xrAnchorManager = AnchorManagerXR.TryCreate(plugin, headTracker); if (xrAnchorManager != null) { Debug.Log("Success creating XR anchor manager"); return(xrAnchorManager); } Debug.Log("Failed to create requested XR SDK anchor manager!"); } #endif // WLT_ARSUBSYSTEMS_PRESENT #if UNITY_WSA if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.WSA) { AnchorManagerWSA wsaAnchorManager = AnchorManagerWSA.TryCreate(plugin, headTracker); if (wsaAnchorManager != null) { Debug.Log("Success creating WSA anchor manager"); return(wsaAnchorManager); } Debug.Log("Failed to create requested WSA anchor manager!"); } #endif // UNITY_WSA if (anchorSettings.anchorSubsystem != AnchorSettings.AnchorSubsystem.Null) { Debug.Log("Failure creating useful anchor manager of any type. Creating null manager"); anchorSettings.anchorSubsystem = AnchorSettings.AnchorSubsystem.Null; } AnchorManagerNull nullAnchorManager = AnchorManagerNull.TryCreate(plugin, headTracker); Debug.Assert(nullAnchorManager != null, "Creation of Null anchor manager should never fail."); return(nullAnchorManager); }
public static async Task <AnchorManagerARF> TryCreate(IPlugin plugin, IHeadPoseTracker headTracker, GameObject arSessionSource, GameObject arSessionOriginSource) { bool xrRunning = await CheckXRRunning(); if (!xrRunning) { Debug.LogError($"Error checking that XR is up and running."); return(null); } if (arSessionSource == null) { Debug.LogError("Trying to create an AR Foundation anchor manager with null session source holder GameObject."); return(null); } if (arSessionOriginSource == null) { Debug.LogError("Trying to create an AR Foundation anchor manager with null session origin source holder GameObject."); return(null); } ARSession arSession = arSessionSource.GetComponent <ARSession>(); if (arSession == null) { DebugLogSetup($"Adding AR session to {arSessionSource.name}"); arSession = arSessionSource.AddComponent <ARSession>(); } if (arSession == null) { Debug.LogError($"Failure acquiring ARSession component from {arSessionSource.name}, can't create AnchorManagerARF"); return(null); } ARSessionOrigin arSessionOrigin = arSessionOriginSource.GetComponent <ARSessionOrigin>(); if (arSessionOrigin == null) { DebugLogSetup($"Adding AR session origin to {arSessionOriginSource.name}"); arSessionOrigin = arSessionOriginSource.AddComponent <ARSessionOrigin>(); } if (arSessionOrigin == null) { Debug.LogError($"Failure acquiring ARSessionOrigin from {arSessionOriginSource.name}, can't create AnchorManagerARF"); } AnchorManagerARF anchorManager = new AnchorManagerARF(plugin, headTracker, arSession, arSessionOrigin); return(anchorManager); }
public static AnchorManagerARF TryCreate(IPlugin plugin, IHeadPoseTracker headTracker, GameObject arSessionSource, GameObject arSessionOriginSource) { if (arSessionSource == null) { Debug.LogError("Trying to create an AR Foundation anchor manager with null session source holder GameObject."); return(null); } if (arSessionOriginSource == null) { Debug.LogError("Trying to create an AR Foundation anchor manager with null session origin source holder GameObject."); return(null); } ARSession arSession = arSessionSource.GetComponent <ARSession>(); if (arSession == null) { Debug.Log($"Adding AR session to {arSessionSource.name}"); arSession = arSessionSource.AddComponent <ARSession>(); } if (arSession == null) { Debug.LogError($"Failure acquiring ARSession component from {arSessionSource.name}, can't create AnchorManagerARF"); return(null); } ARSessionOrigin arSessionOrigin = arSessionOriginSource.GetComponent <ARSessionOrigin>(); if (arSessionOrigin == null) { Debug.Log($"Adding AR session origin to {arSessionOriginSource.name}"); arSessionOrigin = arSessionOriginSource.AddComponent <ARSessionOrigin>(); } if (arSessionOrigin == null) { Debug.LogError($"Failure acquiring ARSessionOrigin from {arSessionOriginSource.name}, can't create AnchorManagerARF"); } AnchorManagerARF anchorManager = new AnchorManagerARF(plugin, headTracker, arSession, arSessionOrigin); return(anchorManager); }
private async Task <IAnchorManager> SelectAnchorManager(IPlugin plugin, IHeadPoseTracker headTracker) { #if false DebugLogSetup($"Select {shared.anchorSettings.anchorSubsystem} anchor manager."); if (AnchorManager != null) { DebugLogSetup("Creating new anchor manager, but have old one. Reseting it before replacing."); AnchorManager.Reset(); } var anchorSettings = shared.anchorSettings; #else if (AnchorManager != null) { DebugLogSetup("Creating new anchor manager, but have old one. Reseting it before replacing."); AnchorManager.Reset(); } var anchorSettings = shared.anchorSettings; #if UNITY_EDITOR if (anchorSettings.NullSubsystemInEditor) { DebugLogSetup($"Switching from {anchorSettings.anchorSubsystem} to AnchorSubsystem.Null because running in editor."); anchorSettings.anchorSubsystem = AnchorSettings.AnchorSubsystem.Null; } #endif // UNITY_EDITOR DebugLogSetup($"Select {anchorSettings.anchorSubsystem} anchor manager."); #endif #if WLT_ARFOUNDATION_PRESENT if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.ARFoundation) { DebugLogSetup($"Trying to create ARF anchor manager on {anchorSettings.ARSessionSource.name} and {anchorSettings.ARSessionOriginSource.name}"); AnchorManagerARF arfAnchorManager = await AnchorManagerARF.TryCreate(plugin, headTracker, anchorSettings.ARSessionSource, anchorSettings.ARSessionOriginSource); if (arfAnchorManager != null) { DebugLogSetup("Success creating ARF anchor manager"); return(arfAnchorManager); } Debug.LogError("Failed to create requested AR Foundation anchor manager!"); } #endif // WLT_ARFOUNDATION_PRESENT #if WLT_ARSUBSYSTEMS_PRESENT if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.XRSDK) { DebugLogSetup($"Trying to create XR anchor manager"); AnchorManagerXR xrAnchorManager = await AnchorManagerXR.TryCreate(plugin, headTracker); if (xrAnchorManager != null) { DebugLogSetup("Success creating XR anchor manager"); return(xrAnchorManager); } Debug.LogError("Failed to create requested XR SDK anchor manager!"); } #endif // WLT_ARSUBSYSTEMS_PRESENT #if UNITY_WSA && !UNITY_2020_1_OR_NEWER if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.WSA) { AnchorManagerWSA wsaAnchorManager = AnchorManagerWSA.TryCreate(plugin, headTracker); if (wsaAnchorManager != null) { DebugLogSetup("Success creating WSA anchor manager"); return(wsaAnchorManager); } Debug.LogError("Failed to create requested WSA anchor manager!"); } #endif // UNITY_WSA #if WLT_ARCORE_SDK_INCLUDED if (anchorSettings.anchorSubsystem == AnchorSettings.AnchorSubsystem.ARCore) { AnchorManagerARCore arCoreAnchorManager = AnchorManagerARCore.TryCreate(plugin, headTracker); if (arCoreAnchorManager != null) { DebugLogSetup("Success creating ARCore anchor manager"); return(arCoreAnchorManager); } Debug.LogError("Failed to create requested ARCore anchor manager!"); } #endif // WLT_ARCORE_SDK_INCLUDED if (anchorSettings.anchorSubsystem != AnchorSettings.AnchorSubsystem.Null) { DebugLogSetup("Failure creating useful anchor manager of any type. Creating null manager"); anchorSettings.anchorSubsystem = AnchorSettings.AnchorSubsystem.Null; shared.anchorSettings = anchorSettings; } AnchorManagerNull nullAnchorManager = AnchorManagerNull.TryCreate(plugin, headTracker); Debug.Assert(nullAnchorManager != null, "Creation of Null anchor manager should never fail."); /// No-op await here to suppress warnings if no anchor manager system which requires asynchronous startup is compiled in. await Task.CompletedTask; return(nullAnchorManager); }