public OpenXRSettings GetSettingsForBuildTargetGroup(BuildTargetGroup buildTargetGroup) { OpenXRSettings ret = null; Settings.TryGetValue(buildTargetGroup, out ret); if (ret == null) { if (!IsValidBuildTargetGroup(buildTargetGroup)) { return(null); } ret = ScriptableObject.CreateInstance <OpenXRSettings>(); if (Settings.ContainsKey(buildTargetGroup)) { Settings[buildTargetGroup] = ret; } else { Settings.Add(buildTargetGroup, ret); } ret.name = buildTargetGroup.ToString(); AssetDatabase.AddObjectToAsset(ret, this); } return(ret); }
protected override void GetValidationChecks(List <ValidationRule> rules, BuildTargetGroup targetGroup) { rules.Add(new ValidationRule(this) { message = "Only the Oculus Touch Interaction Profile is supported right now.", checkPredicate = () => { var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup); if (null == settings) { return(false); } bool touchFeatureEnabled = false; bool otherInteractionFeatureEnabled = false; foreach (var feature in settings.GetFeatures <OpenXRInteractionFeature>()) { if (feature.enabled) { if (feature is OculusTouchControllerProfile) { touchFeatureEnabled = true; } else { otherInteractionFeatureEnabled = true; } } } return(touchFeatureEnabled && !otherInteractionFeatureEnabled); }, fixIt = () => { var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup); if (null == settings) { return; } foreach (var feature in settings.GetFeatures <OpenXRInteractionFeature>()) { feature.enabled = (feature is OculusTouchControllerProfile); } }, error = true, }); }
/// <summary> /// Handle enabled state change to register/unregister device layouts as needed /// </summary> protected internal override void OnEnabledChange() { base.OnEnabledChange(); #if UNITY_EDITOR // Keep the layouts registered in the editor as long as at least one of the build target // groups has the feature enabled. var packageSettings = OpenXRSettings.GetPackageSettings(); var featureType = GetType(); if (null != packageSettings && packageSettings.GetFeatures <OpenXRInteractionFeature>().Any(f => f.feature.enabled && featureType.IsAssignableFrom(f.feature.GetType()))) { RegisterDeviceLayout(); } else { UnregisterDeviceLayout(); } #endif }
private static OpenXRSettings GetInstance(bool useActiveBuildTarget) { OpenXRSettings settings = null; // When running in the Unity Editor, we have to load user's customization of configuration data directly from // EditorBuildSettings. At runtime, we need to grab it from the static instance field instead. #if UNITY_EDITOR settings = GetSettingsForBuildTargetGroup(useActiveBuildTarget ? BuildPipeline.GetBuildTargetGroup(UnityEditor.EditorUserBuildSettings.activeBuildTarget) : BuildTargetGroup.Standalone); #else settings = s_RuntimeInstance; if (settings == null) { settings = ScriptableObject.CreateInstance <OpenXRSettings>(); } #endif return(settings); }
/// <summary> /// Given a feature id, returns the first <see cref="OpenXRFeature" /> associated with that id. /// </summary> /// <param name="buildTargetGroup">The build target group to get the feature from.</param> /// <param name="featureId">The unique id identifying the feature</param> /// <returns>The instance of the feature matching thd id, or null.</returns> public static OpenXRFeature GetFeatureWithIdForBuildTarget(BuildTargetGroup buildTargetGroup, string featureId) { if (String.IsNullOrEmpty(featureId)) { return(null); } var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(buildTargetGroup); if (settings == null) { return(null); } foreach (var feature in settings.features) { if (String.Compare(featureId, feature.featureIdInternal, true) == 0) { return(feature); } } return(null); }
internal static void RegisterLayouts() { #if UNITY_EDITOR // Find all enabled interaction features and force them to register their device layouts var packageSettings = OpenXRSettings.GetPackageSettings(); if (null == packageSettings) { return; } foreach (var feature in packageSettings.GetFeatures <OpenXRInteractionFeature>().Where(f => f.feature.enabled).Select(f => f.feature)) { feature.OnEnabledChange(); } #else foreach (var feature in OpenXRSettings.Instance.GetFeatures <OpenXRInteractionFeature>()) { if (feature.enabled) { ((OpenXRInteractionFeature)feature).RegisterDeviceLayout(); } } #endif }
private void Awake() { s_RuntimeInstance = this; }