Exemple #1
0
    public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
    {
        SerializedProperty name = prop.FindPropertyRelative("Name");
        SerializedProperty clip = prop.FindPropertyRelative("Clip");
        SerializedProperty volume = prop.FindPropertyRelative("Volume");

        if (name == null || clip == null || volume == null) return;

        Grid g = new Grid(pos, 2, 4, 5);

        EditorGUI.PropertyField(g.GetCellsArea(0, 0, 2, 1), name, GUIContent.none);

        EditorGUI.PropertyField(g.GetCellsArea(0, 1, 1, 1), clip, GUIContent.none);

        EditorGUI.Slider(g.GetCellsArea(1, 1, 1, 1), volume, 0f, 1f, GUIContent.none);

        var audioClip = clip.objectReferenceValue as AudioClip;

        if (GUI.Button(g.GetCellsArea(0, 2, 2, 1), "Play"))
        {

            if (player != null) {
                GameObject.DestroyImmediate(player);
                player = null;
            }

            if (player == null)
            {
                player = new GameObject();
                player.hideFlags = HideFlags.HideAndDontSave;
                var s = player.AddComponent<AudioSource>();
                s.clip = audioClip;
                s.volume = volume.floatValue;
                s.Play();
            }
        }

        // update volume on running clip
        if (player != null && player.audio != null && player.audio.clip == audioClip)
        {
            player.audio.volume = volume.floatValue;
        }
    }