using UnityEngine; using UnityEditor; namespace OCES.Audio.Editor { static class AudioExtendSettingsProvider { const string k_assetPath = "Assets/Settings/AudioExtendSettings.asset"; [SettingsProvider] static SettingsProvider Create() { return new SettingsProvider("Project/Audio Extend", SettingsScope.Project) { label = "Audio Extend", guiHandler = searchContext => { var settings = AssetDatabase.LoadAssetAtPath(k_assetPath); if (settings == null) { EditorGUILayout.HelpBox( $"未找到 AudioExtendSettings.asset\n期望路径: {k_assetPath}", MessageType.Warning); if (GUILayout.Button("创建默认配置")) CreateDefaultAsset(); return; } SerializedObject so = new SerializedObject(settings); SerializedProperty prop = so.GetIterator(); prop.NextVisible(true); // 跳过 Script 字段 EditorGUI.BeginChangeCheck(); while (prop.NextVisible(false)) EditorGUILayout.PropertyField(prop, true); if (EditorGUI.EndChangeCheck()) { so.ApplyModifiedProperties(); EditorUtility.SetDirty(settings); AssetDatabase.SaveAssets(); } }, keywords = new[] { "Audio", "SFX", "Music", "Mixer", "Path", "Import" } }; } [MenuItem("Tools/Audio/Create AudioExtendSettings Asset")] static void CreateDefaultAsset() { if (!AssetDatabase.IsValidFolder("Assets/Settings")) AssetDatabase.CreateFolder("Assets", "Settings"); var asset = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(asset, k_assetPath); AssetDatabase.SaveAssets(); Debug.Log($"[AudioExtend] 已创建默认配置:{k_assetPath}"); } } }