You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.7 KiB

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<AudioSource> audioPool = new List<AudioSource>();
private List<AudioSource> others = new List<AudioSource>();
private List<AudioSource> effectAudio = new List<AudioSource>();
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<AudioSource> 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);
}
}
}