123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System;
- using System.IO;
- using UnityEngine;
- using UnityEngine.UIElements;
- using UnityEditor.XR.Management.Metadata;
- namespace UnityEditor.XR.Management
- {
- internal class XRConfigurationProvider : SettingsProvider
- {
- static readonly GUIContent s_WarningToCreateSettings = EditorGUIUtility.TrTextContent("You must create a serialized instance of the settings data in order to modify the settings in this UI. Until then only default settings set by the provider will be available.");
- Type m_BuildDataType = null;
- string m_BuildSettingsKey;
- Editor m_CachedEditor;
- SerializedObject m_SettingsWrapper;
- public XRConfigurationProvider(string path, string buildSettingsKey, Type buildDataType, SettingsScope scopes = SettingsScope.Project) : base(path, scopes)
- {
- m_BuildDataType = buildDataType;
- m_BuildSettingsKey = buildSettingsKey;
- if (currentSettings == null)
- {
- Create();
- }
- }
- ScriptableObject currentSettings
- {
- get
- {
- ScriptableObject settings = null;
- EditorBuildSettings.TryGetConfigObject(m_BuildSettingsKey, out settings);
- if (settings == null)
- {
- string searchText = String.Format("t:{0}", m_BuildDataType.Name);
- string[] assets = AssetDatabase.FindAssets(searchText);
- if (assets.Length > 0)
- {
- string path = AssetDatabase.GUIDToAssetPath(assets[0]);
- settings = AssetDatabase.LoadAssetAtPath(path, m_BuildDataType) as ScriptableObject;
- EditorBuildSettings.AddConfigObject(m_BuildSettingsKey, settings, true);
- }
- }
- return settings;
- }
- }
- void InitEditorData(ScriptableObject settings)
- {
- if (settings != null)
- {
- m_SettingsWrapper = new SerializedObject(settings);
- Editor.CreateCachedEditor(settings, null, ref m_CachedEditor);
- }
- }
- public override void OnActivate(string searchContext, VisualElement rootElement)
- {
- InitEditorData(currentSettings);
- }
- public override void OnDeactivate()
- {
- m_CachedEditor = null;
- m_SettingsWrapper = null;
- }
- public override void OnGUI(string searchContext)
- {
- if (m_SettingsWrapper == null || m_SettingsWrapper.targetObject == null)
- {
- ScriptableObject settings = (currentSettings != null) ? currentSettings : Create();
- InitEditorData(settings);
- }
- if (m_SettingsWrapper != null && m_SettingsWrapper.targetObject != null && m_CachedEditor != null)
- {
- m_SettingsWrapper.Update();
- m_CachedEditor.OnInspectorGUI();
- m_SettingsWrapper.ApplyModifiedProperties();
- }
- }
- ScriptableObject Create()
- {
- ScriptableObject settings = ScriptableObject.CreateInstance(m_BuildDataType) as ScriptableObject;
- if (settings != null)
- {
- var package = XRPackageMetadataStore.GetPackageForSettingsTypeNamed(m_BuildDataType.FullName);
- package?.PopulateNewSettingsInstance(settings);
- string newAssetName = String.Format("{0}.asset", EditorUtilities.TypeNameToString(m_BuildDataType));
- string assetPath = EditorUtilities.GetAssetPathForComponents(EditorUtilities.s_DefaultSettingsPath);
- if (!string.IsNullOrEmpty(assetPath))
- {
- assetPath = Path.Combine(assetPath, newAssetName);
- AssetDatabase.CreateAsset(settings, assetPath);
- EditorBuildSettings.AddConfigObject(m_BuildSettingsKey, settings, true);
- return settings;
- }
- }
- return null;
- }
- }
- }
|