public void OnPreprocessBuild(BuildReport report)
        {
            SetRuntimePluginCopyDelegate();

            if (report.summary.platform != BuildTarget.Android)
            {
                // Sometimes (e.g., build failure), the shader can get "stuck" in the Preloaded Assets array.
                // Make sure that if we are not building for Android, we remove that shader.
                BuildHelper.RemoveShaderFromProject(ARCoreCameraSubsystem.backgroundShaderName);
                return;
            }

            var generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

            if (generalSettings == null)
            {
                return;
            }

            foreach (var loader in generalSettings.Manager.loaders)
            {
                if (loader is ARCoreLoader)
                {
                    EnsureARCoreSupportedIsNotChecked();
                    EnsureGoogleARCoreIsNotPresent();
                    EnsureMinSdkVersion();
                    EnsureOnlyOpenGLES3IsUsed();
                    EnsureGradleIsUsed();
                    EnsureGradleVersionIsSupported();
                    BuildImageTrackingAssets();
                    BuildHelper.AddBackgroundShaderToProject(ARCoreCameraSubsystem.backgroundShaderName);
                    break;
                }
            }
        }
예제 #2
0
        public static bool OculusLoaderPresentInSettingsForBuildTarget(BuildTargetGroup btg)
        {
            var generalSettingsForBuildTarget = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(btg);

            if (!generalSettingsForBuildTarget)
            {
                return(false);
            }
            var settings = generalSettingsForBuildTarget.AssignedSettings;

            if (!settings)
            {
                return(false);
            }

#if XR_MGMT_GTE_400
            bool loaderFound = false;
            for (int i = 0; i < settings.activeLoaders.Count; ++i)
            {
                if (settings.activeLoaders[i] as OculusLoader != null)
                {
                    loaderFound = true;
                    break;
                }
            }

            return(loaderFound);
#else
            List <XRLoader> loaders = settings.loaders;
            return(loaders.Exists(loader => loader is OculusLoader));
#endif
        }
예제 #3
0
        public virtual void TearDownTest()
        {
            EditorBuildSettings.RemoveConfigObject(XRGeneralSettings.k_SettingsKey);

            if (!string.IsNullOrEmpty(testPathToGeneralSettings))
            {
                AssetDatabase.DeleteAsset(testPathToGeneralSettings);
            }

            if (!string.IsNullOrEmpty(testPathToSettings))
            {
                AssetDatabase.DeleteAsset(testPathToSettings);
            }

            xrGeneralSettings.Manager = null;
            UnityEngine.Object.DestroyImmediate(xrGeneralSettings);
            xrGeneralSettings = null;

            UnityEngine.Object.DestroyImmediate(testManager);
            testManager = null;

            UnityEngine.Object.DestroyImmediate(buildTargetSettings);
            buildTargetSettings = null;

            if (currentSettings != null)
            {
                EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, currentSettings, true);
            }
            else
            {
                EditorBuildSettings.RemoveConfigObject(XRGeneralSettings.k_SettingsKey);
            }

            AssetDatabase.DeleteAsset(Path.Combine("Assets", "Temp"));
        }
예제 #4
0
    protected bool IsLoaderEnabledForTarget(BuildTargetGroup buildTargetGroup, string loaderTypeName)
    {
        if (buildTargetGroup != BuildTargetGroup.Standalone && buildTargetGroup != BuildTargetGroup.WSA)
        {
            return(false);
        }

#if UNITY_EDITOR
        XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(buildTargetGroup);
#else
        XRGeneralSettings settings = XRGeneralSettings.Instance;
#endif

        if (settings == null || settings.Manager == null)
        {
            return(false);
        }

        var instance = TestBaseSetup.GetInstanceOfTypeWithNameFromAssetDatabase(loaderTypeName);
        if (instance == null || !(instance is XRLoader))
        {
            return(false);
        }

        XRLoader loader = instance as XRLoader;
        return(settings.Manager.activeLoaders.Contains(loader));
    }
예제 #5
0
        static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
        {
            if (s_ScenesWithARTypes.Count > 0 && s_SessionCount == 0)
            {
                var scenes = "";
                foreach (var sceneName in s_ScenesWithARTypes)
                {
                    scenes += string.Format("\n\t{0}", sceneName);
                }

                Debug.LogWarningFormat(
                    "The following scenes contain AR components but no ARSession. The ARSession component controls the AR lifecycle, so these components will not do anything at runtime. Was this intended?{0}",
                    scenes);
            }

            var generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

            if (generalSettings != null && generalSettings.Manager != null && generalSettings.Manager.activeLoaders != null)
            {
                int loaderCount = generalSettings.Manager.activeLoaders.Count;
                if (loaderCount <= 0 && s_SessionCount > 0)
                {
                    Debug.LogWarning(
                        "There are scenes that contain an ARSession, but no XR plug-in providers have been selected for the current platform. To make a plug-in provider available at runtime go to Project Settings > XR Plug-in Management and enable at least one for the target platform.");
                }
            }

            s_ScenesWithARTypes.Clear();
            s_SessionCount = 0;
        }
예제 #6
0
        private bool SetEnableLoderForTarget(BuildTargetGroup buildTargetGroup, bool enable)
        {
            if (buildTargetGroup != BuildTargetGroup.Standalone && buildTargetGroup != BuildTargetGroup.WSA)
            {
                return(false);
            }

            XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(buildTargetGroup);

            if (settings == null)
            {
                return(false);
            }

            bool ret = false;

            if (enable)
            {
                ret = XRPackageMetadataStore.AssignLoader(settings.Manager, typeof(WindowsMRLoader).Name, buildTargetGroup);
            }
            else
            {
                ret = XRPackageMetadataStore.RemoveLoader(settings.Manager, typeof(WindowsMRLoader).Name, buildTargetGroup);
            }

            return(ret);
        }
예제 #7
0
    protected bool EnableLoader(string loaderTypeName, bool enable, BuildTargetGroup buildTargetGroup = BuildTargetGroup.Standalone)
    {
#if UNITY_EDITOR
        XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(buildTargetGroup);
#else
        XRGeneralSettings settings = XRGeneralSettings.Instance;
#endif

        if (settings == null || settings.Manager == null)
        {
            return(false);
        }

        var instance = TestBaseSetup.GetInstanceOfTypeWithNameFromAssetDatabase(loaderTypeName);
        if (instance == null || !(instance is XRLoader))
        {
            return(false);
        }

        XRLoader loader = instance as XRLoader;
        bool     ret    = false;

        if (enable)
        {
            ret = settings.Manager.TryAddLoader(loader);
        }
        else
        {
            ret = settings.Manager.TryRemoveLoader(loader);
        }

        return(ret);
    }
예제 #8
0
        public bool ShouldIncludeRemotingPluginsInBuild(string path)
        {
            XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

            if (generalSettings == null)
            {
                return(false);
            }

            bool loaderFound = false;

            for (int i = 0; i < generalSettings.Manager.loaders.Count; ++i)
            {
                if (generalSettings.Manager.loaders[i] as WindowsMRLoader != null)
                {
                    loaderFound = true;
                    break;
                }
            }

            if (!loaderFound)
            {
                return(false);
            }

            WindowsMRBuildSettings buildSettings = BuildSettingsForBuildTargetGroup(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)) as WindowsMRBuildSettings;

            if (buildSettings == null)
            {
                return(false);
            }

            return(buildSettings.HolographicRemoting);
        }
        /// <summary>OnPostprocessBuild override to provide XR Plugin specific build actions.</summary>
        /// <param name="report">The build report.</param>
        public override void OnPostprocessBuild(BuildReport report)
        {
            base.OnPostprocessBuild(report);

            XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(report.summary.platformGroup);

            if (settings == null)
            {
                return;
            }

            string bootConfigPath = report.summary.outputPath;

            if (report.summary.platformGroup == BuildTargetGroup.WSA)
            {
                bool usePrimaryWindow = true;
                WindowsMRBuildSettings buildSettings = BuildSettingsForBuildTargetGroup(report.summary.platformGroup);
                if (buildSettings != null)
                {
                    usePrimaryWindow = buildSettings.UsePrimaryWindowForDisplay;
                }

                // Boot Config data path is highly specific to the platform being built.
                bootConfigPath = Path.Combine(bootConfigPath, PlayerSettings.productName);
                bootConfigPath = Path.Combine(bootConfigPath, "Data");
                bootConfigPath = Path.Combine(bootConfigPath, "boot.config");

                using (StreamWriter sw = File.AppendText(bootConfigPath))
                {
                    sw.WriteLine(String.Format("{0}={1}", k_ForcePrimaryWindowHolographic, usePrimaryWindow ? 1 : 0));
                }
            }
        }
예제 #10
0
        private bool HasLoaderEnabledForTarget(BuildTargetGroup buildTargetGroup)
        {
            if (buildTargetGroup != BuildTargetGroup.Standalone && buildTargetGroup != BuildTargetGroup.Android)
            {
                return(false);
            }

            XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(buildTargetGroup);

            if (settings == null)
            {
                return(false);
            }

            bool loaderFound = false;

            for (int i = 0; i < settings.Manager.activeLoaders.Count; ++i)
            {
                if (settings.Manager.activeLoaders[i] as OculusLoader != null)
                {
                    loaderFound = true;
                    break;
                }
            }

            return(loaderFound);
        }
예제 #11
0
        private static void SetUpAppRemoting(BuildTargetGroup targetGroup)
        {
            Debug.Log($"Setting up app remoting for {targetGroup}");

            const string AppRemotingPlugin  = "Microsoft.MixedReality.OpenXR.Remoting.AppRemotingPlugin";
            Type         appRemotingFeature = typeof(AppRemoting).Assembly.GetType(AppRemotingPlugin);

            if (appRemotingFeature == null)
            {
                Debug.LogError($"Could not find {AppRemotingPlugin}. Has this class been removed or renamed?");
                return;
            }

            FeatureHelpers.RefreshFeatures(targetGroup);
            OpenXRFeature feature = OpenXRSettings.ActiveBuildTargetInstance.GetFeature(appRemotingFeature);

            if (feature == null)
            {
                Debug.LogError($"Could not load {AppRemotingPlugin} as an OpenXR feature. Has this class been removed or renamed?");
                return;
            }
            feature.enabled = true;

            XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(targetGroup);

            if (settings != null)
            {
                settings.InitManagerOnStart = false;
            }
        }
예제 #12
0
        public static bool OculusLoaderPresentInSettingsForBuildTarget(BuildTargetGroup btg)
        {
            var generalSettingsForBuildTarget = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(btg);

            if (!generalSettingsForBuildTarget)
            {
                return(false);
            }
            var settings = generalSettingsForBuildTarget.AssignedSettings;

            if (!settings)
            {
                return(false);
            }

            bool loaderFound = false;

            for (int i = 0; i < settings.activeLoaders.Count; ++i)
            {
                if (settings.activeLoaders[i] as OculusLoader != null)
                {
                    loaderFound = true;
                    break;
                }
            }

            return(loaderFound);
        }
        public void OnPreprocessBuild(BuildReport report)
        {
            SetRuntimePluginCopyDelegate();

            if (report.summary.platform != BuildTarget.Android)
            {
                return;
            }

            XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

            if (generalSettings == null)
            {
                return;
            }

            foreach (var loader in generalSettings.Manager.loaders)
            {
                if (loader is ARCoreLoader)
                {
                    EnsureARCoreSupportedIsNotChecked();
                    EnsureGoogleARCoreIsNotPresent();
                    EnsureMinSdkVersion();
                    EnsureOnlyOpenGLES3IsUsed();
                    EnsureGradleIsUsed();
                    BuildImageTrackingAssets();
                    BuildHelper.AddBackgroundShaderToProject(ARCoreCameraSubsystem.backgroundShaderName);
                    break;
                }
            }
        }
        /// <summary>
        /// Applies any preprocessing necessary to setup assets for a given build target.
        /// </summary>
        /// <remarks>
        /// This method instantiates all classes that derive from <see cref="IPreprocessBuild"/> and executes their
        /// <see cref="IPreprocessBuild.OnPreprocessBuild"/> methods.
        ///
        /// You should call this before building asset bundles (see
        /// [BuildPipeline.BuildAssetBundles](xref:UnityEditor.BuildPipeline.BuildAssetBundles(System.String,UnityEditor.BuildAssetBundleOptions,UnityEditor.BuildTarget)))
        /// in order to ensure that all AR assets have been correctly configured.
        /// </remarks>
        /// <param name="buildTarget">The build target for which assets should be preprocessed.</param>
        public static void PreprocessBuild(BuildTarget buildTarget)
        {
            // Get the list of active loaders for the given BuildTarget
            var settings = XRGeneralSettingsPerBuildTarget
                           .XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(buildTarget));
            var activeLoaders = settings && settings.Manager ? settings.Manager.activeLoaders : null;

            if (activeLoaders == null)
            {
                return;
            }

            // Clear the data store before asking packages to populate it.
            XRReferenceImageLibraryBuildProcessor.ClearDataStore();

            // Find and create all IPreprocessBuild objects
            var interfaces = AppDomain.CurrentDomain
                             .GetAssemblies()
                             .SelectMany(x => x.GetTypes())
                             .Where(type => Array.Exists(type.GetInterfaces(), i => i == typeof(IPreprocessBuild)))
                             .Select(type => Activator.CreateInstance(type) as IPreprocessBuild)
                             .Where(buildPreprocessor => buildPreprocessor != null)
                             .ToList();

            // Sort by callback order
            interfaces.Sort((a, b) => a.callbackOrder.CompareTo(b.callbackOrder));

            // Invoke OnPreprocessBuild on each one
            var eventArgs = new PreprocessBuildEventArgs(buildTarget, activeLoaders);

            foreach (var @interface in interfaces)
            {
                @interface.OnPreprocessBuild(eventArgs);
            }
        }
예제 #15
0
 private void EnsureArgumentsNotNull(XRGeneralSettings xrGeneralSettings,
                                     XRGeneralSettingsPerBuildTarget buildTargetSettings, XRManagerSettings managerSettings)
 {
     EnsureArgumentNotNull(xrGeneralSettings);
     EnsureArgumentNotNull(buildTargetSettings);
     EnsureArgumentNotNull(managerSettings);
 }
예제 #16
0
        private void SetupLoader <T>(XRGeneralSettings xrGeneralSettings,
                                     XRGeneralSettingsPerBuildTarget buildTargetSettings,
                                     XRManagerSettings managerSettings) where T : XRLoader
        {
            var loader = ScriptableObject.CreateInstance <T>();

            if (loader == null)
            {
                throw new ArgumentNullException(
                          $"Tried to instantiate an instance of {typeof(T).Name}, but it is null.");
            }

            loader.name = loader.GetType().Name;

            xrGeneralSettings.Manager.loaders.Add(loader);

            buildTargetSettings.SetSettingsForBuildTarget(EditorUserBuildSettings.selectedBuildTargetGroup,
                                                          xrGeneralSettings);

            EnsureXrGeneralSettingsPathExists(xrsdkTestXrSettingsPath);

            AssetDatabase.CreateAsset(buildTargetSettings, xrsdkTestXrSettingsPath);

            AssetDatabase.AddObjectToAsset(xrGeneralSettings, xrsdkTestXrSettingsPath);
            AssetDatabase.AddObjectToAsset(managerSettings, xrsdkTestXrSettingsPath);
            AssetDatabase.AddObjectToAsset(loader, xrsdkTestXrSettingsPath);
        }
예제 #17
0
        public static void SetXRLoaderEnabled(string loaderClassName, BuildTargetGroup buildTargetGroup, bool enabled)
        {
#if VIU_XR_GENERAL_SETTINGS
            MethodInfo method = Type.GetType("UnityEditor.XR.Management.XRSettingsManager, Unity.XR.Management.Editor")
                                .GetProperty("currentSettings", BindingFlags.NonPublic | BindingFlags.Static).GetGetMethod(true);
            XRGeneralSettingsPerBuildTarget generalSettings = (XRGeneralSettingsPerBuildTarget)method.Invoke(null, new object[] {});

            XRGeneralSettings xrSettings = generalSettings.SettingsForBuildTarget(buildTargetGroup);

            if (xrSettings == null)
            {
                xrSettings = ScriptableObject.CreateInstance <XRGeneralSettings>() as XRGeneralSettings;
                generalSettings.SetSettingsForBuildTarget(buildTargetGroup, xrSettings);
                xrSettings.name = $"{buildTargetGroup.ToString()} Settings";
                AssetDatabase.AddObjectToAsset(xrSettings, AssetDatabase.GetAssetOrScenePath(generalSettings));
            }

            var serializedSettingsObject  = new SerializedObject(xrSettings);
            SerializedProperty loaderProp = serializedSettingsObject.FindProperty("m_LoaderManagerInstance");
            if (loaderProp.objectReferenceValue == null)
            {
                var xrManagerSettings = ScriptableObject.CreateInstance <XRManagerSettings>() as XRManagerSettings;
                xrManagerSettings.name = $"{buildTargetGroup.ToString()} Providers";
                AssetDatabase.AddObjectToAsset(xrManagerSettings, AssetDatabase.GetAssetOrScenePath(generalSettings));
                loaderProp.objectReferenceValue = xrManagerSettings;
                serializedSettingsObject.ApplyModifiedProperties();
            }

            if (enabled)
            {
#if VIU_XR_PACKAGE_METADATA_STORE
                if (!UnityEditor.XR.Management.Metadata.XRPackageMetadataStore.AssignLoader(xrSettings.AssignedSettings, loaderClassName, buildTargetGroup))
                {
                    Debug.LogWarning("Failed to assign XR loader: " + loaderClassName);
                }
#else
                if (!AssignLoader(xrSettings.AssignedSettings, loaderClassName))
                {
                    Debug.LogWarning("Failed to assign XR loader: " + loaderClassName);
                }
#endif
            }
            else
            {
#if VIU_XR_PACKAGE_METADATA_STORE
                if (!UnityEditor.XR.Management.Metadata.XRPackageMetadataStore.RemoveLoader(xrSettings.AssignedSettings, loaderClassName, buildTargetGroup))
                {
                    Debug.LogWarning("Failed to remove XR loader: " + loaderClassName);
                }
#else
                if (!RemoveLoader(xrSettings.AssignedSettings, loaderClassName))
                {
                    Debug.LogWarning("Failed to remove XR loader: " + loaderClassName);
                }
#endif
            }
#endif
        }
        public void Verify_iOS_XR_Settings()
        {
            var generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.iOS);
            var settingManager  = generalSettings.Manager;

            Assert.AreEqual(true, generalSettings.InitManagerOnStart);
            Assert.AreEqual(1, settingManager.activeLoaders.Count());
            Assert.AreEqual("AR Kit Loader", settingManager.activeLoaders[0].name);
        }
예제 #19
0
        public override void PerBuildExecute(BuildReleaseType releaseType, BuildPlatform platform, BuildArchitecture architecture, BuildDistribution distribution, DateTime buildTime, ref BuildOptions options, string configKey, string buildPath)
        {
            XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(platform.targetGroup);
            XRManagerSettings settingsManager = generalSettings.Manager;

            generalSettings.InitManagerOnStart = InitializeXROnStartup;

            settingsManager.loaders = XRPlugins;
        }
 public void OnPreprocessBuild(BuildReport report)
 {
     if (!report.summary.platform.Equals(BuildTarget.StandaloneWindows) &&
         !report.summary.platform.Equals(BuildTarget.StandaloneWindows64))
     {
         var generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Standalone);
         var settingManager  = generalSettings.Manager;
         settingManager.loaders.Clear();
     }
 }
예제 #21
0
        public virtual void TearDownTest()
        {
#if UNITY_EDITOR
            EditorBuildSettings.RemoveConfigObject(XRGeneralSettings.k_SettingsKey);
            buildTargetSettings = null;
            testManager         = null;
            xrGeneralSettings   = null;
            AssetDatabase.DeleteAsset(Path.Combine("Assets", "Temp"));
#endif
        }
예제 #22
0
        public virtual void SetupTest()
        {
#if UNITY_EDITOR
            var windowTypes = TypeCache.GetTypesDerivedFrom(typeof(EditorWindow));
            foreach (var wt in windowTypes)
            {
                if (wt.Name.Contains("ProjectSettingsWindow"))
                {
                    var projectSettingsWindow = EditorWindow.GetWindow(wt);
                    if (projectSettingsWindow != null)
                    {
                        projectSettingsWindow.Close();
                    }
                }
            }

            testPathToGeneralSettings = GetAssetPathForComponents(s_TestGeneralSettings);
            testPathToGeneralSettings = Path.Combine(testPathToGeneralSettings, "Test_XRGeneralSettingsPerBuildTarget.asset");
            if (File.Exists(testPathToGeneralSettings))
            {
                AssetDatabase.DeleteAsset(testPathToGeneralSettings);
            }

            buildTargetSettings = ScriptableObject.CreateInstance <XRGeneralSettingsPerBuildTarget>();
            AssetDatabase.CreateAsset(buildTargetSettings, testPathToGeneralSettings);

            testPathToSettings = GetAssetPathForComponents(s_TempSettingsPath);
            testPathToSettings = Path.Combine(testPathToSettings, "Test_XRGeneralSettings.asset");

            if (File.Exists(testPathToSettings))
            {
                AssetDatabase.DeleteAsset(testPathToSettings);
            }

            testManager = ScriptableObject.CreateInstance <XRManagerSettings>();

            xrGeneralSettings          = ScriptableObject.CreateInstance <XRGeneralSettings>() as XRGeneralSettings;
            XRGeneralSettings.Instance = xrGeneralSettings;

            xrGeneralSettings.Manager = testManager;
            buildTargetSettings.SetSettingsForBuildTarget(BuildTargetGroup.Standalone, xrGeneralSettings);

            AssetDatabase.CreateAsset(xrGeneralSettings, testPathToSettings);
            AssetDatabase.AddObjectToAsset(testManager, xrGeneralSettings);

            AssetDatabase.SaveAssets();

            EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, buildTargetSettings, true);
#endif
        }
예제 #23
0
        public static bool HasLoader(BuildTargetGroup targetGroup, System.Type loader)
        {
            var settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(targetGroup);

            if (settings)
            {
#pragma warning disable CS0618
                return(settings.Manager.loaders.Any(loader.IsInstanceOfType));

#pragma warning restore CS0618
            }

            return(false);
        }
예제 #24
0
    public void ValidateLoaderTest()
    {
        if (RuntimeSettings.reuseTestsForXR)
        {
            InjectMockHMD.SetupLoader();

            var buildTargetSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Standalone);

            Assert.That(buildTargetSettings != null, "Unable to read for XR settings for build target!");
            Assert.AreEqual(1, buildTargetSettings.AssignedSettings.loaders.Count, "There should be exactly one XR loader!");
            Assert.That(buildTargetSettings.InitManagerOnStart, "XR loader is not set to init on start!");
            Assert.AreEqual("Mock HMD Loader", buildTargetSettings.AssignedSettings.loaders[0].name, "Invalid XR loader found!");
        }
    }
    public void UpdateConfig()
    {
        EditorUserBuildSettings.development = DevelopmentBuild;
        AppConfig.IsDebug       = DevelopmentBuild;
        AppConfig.IsHotfix      = IsHotfix;
        AppConfig.IsLoadAB      = IsLoadAB;
        AppConfig.IsProServer   = IsProServer;
        AppConfig.RunXLua       = RunXLuaScripts;
        AppConfig.AppFrameRate  = AppFrameRate;
        AppConfig.TargetPackage = ApkTarget;

        EditorUtility.SetDirty(AppConfig);

        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
        {
            EditorUserBuildSettings.exportAsGoogleAndroidProject = NativeApp;

            XRGeneralSettings androidXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Android);

            if (androidXRSettings == null)
            {
                var assignedSettings = ScriptableObject.CreateInstance <XRManagerSettings>() as XRManagerSettings;
                androidXRSettings.AssignedSettings = assignedSettings;
                EditorUtility.SetDirty(androidXRSettings); // Make sure this gets picked up for serialization later.
            }

            //取消当前选择的
            IReadOnlyList <XRLoader> list = androidXRSettings.Manager.activeLoaders;
            int hasCount = list.Count;
            //Debug.Log(hasCount);
            for (int i = 0; i < hasCount; i++)
            {
                string nameTemp = list[0].GetType().FullName;
                Debug.Log("disable xr plug:" + nameTemp);
                XRPackageMetadataStore.RemoveLoader(androidXRSettings.Manager, nameTemp, BuildTargetGroup.Android);
            }
            androidXRSettings.InitManagerOnStart = false;
            if (ApkTarget == TargetPackage.Pico)
            {
                androidXRSettings.InitManagerOnStart = true;
                //启用
                string loaderTypeName = "Unity.XR.PXR.PXR_Loader";
                XRPackageMetadataStore.AssignLoader(androidXRSettings.Manager, loaderTypeName, BuildTargetGroup.Android);
            }
            EditorUtility.SetDirty(androidXRSettings); // Make sure this gets picked up for serialization later.
        }
        AssetDatabase.Refresh();
    }
예제 #26
0
    public void ValidateLoaderTest()
    {
        if (RuntimeSettings.reuseTestsForXR)
        {
            InjectMockHMD.SetupLoader();

            var buildTargetSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Standalone);

// XRTODO: remove pragmas once MockHMD package is published with new dependencies to xr.sdk.management and replace loaders with activeLoaders
#pragma warning disable CS0618
            Assert.That(buildTargetSettings != null, "Unable to read for XR settings for build target!");
            Assert.AreEqual(1, buildTargetSettings.AssignedSettings.loaders.Count, "There should be exactly one XR loader!");
            Assert.That(buildTargetSettings.InitManagerOnStart, "XR loader is not set to init on start!");
            Assert.AreEqual("Mock HMD Loader", buildTargetSettings.AssignedSettings.loaders[0].name, "Invalid XR loader found!");
#pragma warning restore CS0618
        }
    }
예제 #27
0
        public void UpdateGeneralSettings_ToPerBuildTargetSettings()
        {
            bool success = XRGeneralSettingsUpgrade.UpgradeSettingsToPerBuildTarget(testPathToSettings);

            Assert.IsTrue(success);

            XRGeneralSettingsPerBuildTarget pbtgs = null;

            pbtgs = AssetDatabase.LoadAssetAtPath(testPathToSettings, typeof(XRGeneralSettingsPerBuildTarget)) as XRGeneralSettingsPerBuildTarget;
            Assert.IsNotNull(pbtgs);

            var settings = pbtgs.SettingsForBuildTarget(EditorUserBuildSettings.selectedBuildTargetGroup);

            Assert.IsNotNull(settings);
            Assert.IsNotNull(settings.Manager);
            Assert.AreEqual(testManager, settings.Manager);
        }
예제 #28
0
        internal static bool IsLoaderAssigned(string loaderTypeName, BuildTargetGroup buildTargetGroup)
        {
            var settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(buildTargetGroup);

            if (settings == null)
            {
                return(false);
            }

            foreach (var loader in settings.AssignedSettings.loaders)
            {
                if (loader != null && String.Compare(loader.GetType().FullName, loaderTypeName) == 0)
                {
                    return(true);
                }
            }
            return(false);
        }
        public bool ShouldIncludeRuntimePluginsInBuild(string path)
        {
            XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));

            if (generalSettings == null)
            {
                return(false);
            }

            foreach (var loader in generalSettings.Manager.loaders)
            {
                if (loader is OpenVRLoader)
                {
                    return(true);
                }
            }
            return(false);
        }
        public static bool LoaderPresentInSettingsForBuildTarget(BuildTargetGroup btg)
        {
            var generalSettingsForBuildTarget = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(btg);

            if (!generalSettingsForBuildTarget)
            {
                return(false);
            }
            var settings = generalSettingsForBuildTarget.AssignedSettings;

            if (!settings)
            {
                return(false);
            }
            List <XRLoader> loaders = settings.loaders;

            return(loaders.Exists(loader => loader is PXR_Loader));
        }