/// <summary> /// See [XRLoader.Initialize](xref:UnityEngine.XR.Management.XRLoader.Initialize) /// </summary> /// <returns>True if initialized, false otherwise.</returns> public override bool Initialize() { if (currentLoaderState == LoaderState.Initialized) { return(true); } if (!validLoaderInitStates.Contains(currentLoaderState)) { return(false); } if (Instance != null) { Debug.LogError("Only one OpenXRLoader can be initialized at any given time"); return(false); } #if UNITY_EDITOR if (!DisableValidationChecksOnEnteringPlaymode) { if (OpenXRProjectValidation.LogPlaymodeValidationIssues()) { return(false); } } OpenXRSettings.Instance.lastPlayVersion = UnityEditor.PackageManager.PackageInfo.FindForAssembly(GetType().Assembly)?.version; #endif DiagnosticReport.StartReport(); // Wrap the initialization in a try catch block to ensure if any exceptions are thrown that // we cleanup, otherwise the user will not be able to run again until they restart the editor. try { if (InitializeInternal()) { return(true); } } catch (Exception e) { Debug.LogException(e); } Deinitialize(); Instance = null; OpenXRAnalytics.SendInitializeEvent(false); return(false); }
public void ValidationError() { bool errorFixed = false; // Set up a validation check ... MockRuntime.Instance.TestCallback = (s, o) => { if (s == "GetValidationChecks") { var validationChecks = o as List <OpenXRFeature.ValidationRule>; validationChecks?.Add(new OpenXRFeature.ValidationRule { message = "Mock Validation Fail", checkPredicate = () => errorFixed, fixIt = () => errorFixed = true, error = true }); } return(true); }; // Try to build the player ... var report = zBuildHookTests.BuildMockPlayer(); // It will fail because of the above validation issue ... Assert.AreEqual(BuildResult.Failed, report.summary.result); // There's one validation issue ... var validationIssues = new List <OpenXRFeature.ValidationRule>(); OpenXRProjectValidation.GetCurrentValidationIssues(validationIssues, BuildTargetGroup.Standalone); Assert.AreEqual(1, validationIssues.Count); // Fix it ... Assert.IsFalse(errorFixed); validationIssues[0].fixIt.Invoke(); Assert.IsTrue(errorFixed); // Now there's zero validation issues ... OpenXRProjectValidation.GetCurrentValidationIssues(validationIssues, BuildTargetGroup.Standalone); Assert.AreEqual(0, validationIssues.Count); // Close the validation window ... OpenXRProjectValidationWindow.CloseWindow(); }
private bool InitializeInternal() { Instance = this; currentLoaderState = LoaderState.InitializeAttempted; #if TEST_SUPPORT if (ShouldExitEarly()) { return(false); } #endif #if UNITY_EDITOR if (!DisableValidationChecksOnEnteringPlaymode) { if (OpenXRProjectValidation.LogPlaymodeValidationIssues()) { return(false); } } #endif OpenXRFeature.Initialize(); if (!LoadOpenXRSymbols()) { Debug.LogError("Failed to load openxr runtime loader."); return(false); } // Sort the features array by priority in descending order (highest priority first) OpenXRSettings.Instance.features = OpenXRSettings.Instance.features .Where(f => f != null) .OrderByDescending(f => f.priority) .ThenBy(f => f.nameUi) .ToArray(); OpenXRFeature.HookGetInstanceProcAddr(); if (!Internal_InitializeSession()) { return(false); } SetApplicationInfo(); RequestOpenXRFeatures(); RegisterOpenXRCallbacks(); if (null != OpenXRSettings.Instance) { OpenXRSettings.Instance.ApplySettings(); } if (!CreateSubsystems()) { return(false); } if (OpenXRFeature.requiredFeatureFailed) { return(false); } OpenXRAnalytics.SendInitializeEvent(true); OpenXRFeature.ReceiveLoaderEvent(this, OpenXRFeature.LoaderEvent.SubsystemCreate); OpenXRInput.Initialize(); DebugLogEnabledSpecExtensions(); Application.onBeforeRender += ProcessOpenXRMessageLoop; currentLoaderState = LoaderState.Initialized; return(true); }
public UnityXRRecommendedSettings() { #if VIU_OPENXR && VIU_XR_GENERAL_SETTINGS Add(new VIUVersionCheck.RecommendedSetting <int> { settingTitle = "Review OpenXR Project Validation Issues", skipCheckFunc = () => !VIUSettingsEditor.PackageManagerHelper.IsPackageInList(VIUSettingsEditor.OPENXR_PLUGIN_PACKAGE_NAME) || !XRPluginManagementUtils.IsXRLoaderEnabled(UnityXRModule.OPENXR_LOADER_NAME, VIUSettingsEditor.activeBuildTargetGroup), currentValueFunc = () => { OpenXRProjectValidation.GetCurrentValidationIssues(s_tempOpenXRValidationIssues, VIUSettingsEditor.activeBuildTargetGroup); return(s_tempOpenXRValidationIssues.Count); }, setValueFunc = (int value) => { try { Assembly openXREditorAsm = null; foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { if (asm.GetName().Name == "Unity.XR.OpenXR.Editor") { openXREditorAsm = asm; break; } } MethodInfo openWindowMethod = openXREditorAsm.GetType("UnityEditor.XR.OpenXR.OpenXRProjectValidationWindow", true).GetMethod("ShowWindow", BindingFlags.NonPublic | BindingFlags.Static); openWindowMethod.Invoke(null, new object[] { VIUSettingsEditor.activeBuildTargetGroup }); } catch (Exception e) { Debug.LogError("Failed to open OpenXRProjectValidationWindow: " + e); } }, recommendedValue = 0, }); Add(new VIUVersionCheck.RecommendedSetting <bool> { settingTitle = "Enable All Feature Sets", skipCheckFunc = () => !VIUSettingsEditor.PackageManagerHelper.IsPackageInList(VIUSettingsEditor.OPENXR_PLUGIN_PACKAGE_NAME) || !XRPluginManagementUtils.IsXRLoaderEnabled(UnityXRModule.OPENXR_LOADER_NAME, VIUSettingsEditor.activeBuildTargetGroup), currentValueFunc = () => { return(OpenXRSettings.ActiveBuildTargetInstance.GetFeatures <OpenXRInteractionFeature>().All(feature => feature.enabled)); }, setValueFunc = (bool value) => { if (!value) { return; } OpenXRFeature[] features = OpenXRSettings.ActiveBuildTargetInstance.GetFeatures <OpenXRInteractionFeature>(); foreach (OpenXRFeature feature in features) { feature.enabled = true; } }, recommendedValue = true, }); #endif }