using UnityEngine; using UnityEditor; using System.Collections.Generic; //----------------------------------------------------------------------------- // Copyright 2012-2016 RenderHeads Ltd. All rights reserved. //----------------------------------------------------------------------------- [CustomEditor(typeof(AudioManager))] public class AudioManagerEditor : Editor { private AudioManager _manager; //private AudioSource[] _audios; private List audioPool = new List(); private List others = new List(); private List effectAudio = new List(); private void UpdateMovies() { AudioSource[] audios = (AudioSource[])FindObjectsOfType(typeof(AudioSource)); audioPool.Clear(); effectAudio.Clear(); others.Clear(); foreach (AudioSource audio in audios) { if(audio.transform.parent == AudioManager.Instance.effectAudioPool) { } else if(audio.transform.parent == AudioManager.Instance.audioPool) { audioPool.Add(audio); } else if (audio.transform.parent == AudioManager.Instance.effectAudio) { effectAudio.Add(audio); } else { others.Add(audio); } } } public override bool RequiresConstantRepaint() { return true; } private void DrawUI(List audios, bool showLoop = true) { foreach (AudioSource audio in audios) { GUILayout.BeginHorizontal(); { if (GUILayout.Button(audio.name)) Selection.activeObject = audio; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { if (showLoop) audio.loop = GUILayout.Toggle(audio.loop, "loop", GUILayout.ExpandWidth(false)); if(audio!=null&& audio.clip!=null) GUILayout.HorizontalSlider(audio.time, 0f, audio.clip.length, GUILayout.MinWidth(128f), GUILayout.ExpandWidth(true)); } GUILayout.EndHorizontal(); } } public override void OnInspectorGUI() { DrawDefaultInspector(); _manager = (this.target) as AudioManager; UpdateMovies(); GUI.color = Color.white; DrawUI(audioPool); GUI.color = Color.red; DrawUI(others); GUI.color = Color.grey; DrawUI(effectAudio); if (GUI.changed) { EditorUtility.SetDirty(_manager); } } }