封装好的声音管理器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 音频管理
/// </summary>
public class SoundControl : MonoSingleton<SoundControl>
{
    /// <summary>
    ///背景音乐
    /// </summary>
    private AudioSource backAudio;
    /// <summary>
    /// 音效
    /// </summary>
    private AudioSource effectAudio;

    private void Awake()
    {


        backAudio = gameObject.AddComponent<AudioSource>();
        effectAudio = gameObject.AddComponent<AudioSource>();

        backAudio.loop = true;
        backAudio.playOnAwake = false;

        effectAudio.loop = false;
        effectAudio.playOnAwake = true;
    }

    Dictionary<object, AudioClip> audioDic;

    public SoundControl()
    {
        if (audioDic == null)
        {
            audioDic = new Dictionary<object, AudioClip>();
        }
    }

    /// <summary>
    /// 播放背景音乐
    /// </summary>
    /// <param name="soundName"></param>
    private void PlayBackAudioBase(object enumName, float volume)
    {
        print(effectAudio.isPlaying);
        AudioClip ac;
        if (!audioDic.ContainsKey(enumName))
        {
            ac = LoadResource.Instance.LoadObject<AudioClip>(enumName);
            audioDic.Add(enumName, ac);
        }
        else
        {
            ac = audioDic[enumName];
        }

        if (ac != null)
        {
            backAudio.clip = ac;
            backAudio.Play();
            backAudio.volume = volume;
        }

    }

    public void PlayBackAudio(SoundEnemy enumName, float volume)
    {
        if (!effectAudio.isPlaying)
        {
            if (backAudio.clip == null)
            {
                PlayBackAudioBase(enumName, volume);
            }
            else
            if (backAudio.clip.name == enumName.ToString())
            {
                //print(backAudio.clip.name + "+++" + enumName.ToString());
                return;
            }
            else
            {
                PlayBackAudioBase(enumName, volume);
            }
        }
    }
    /// <summary>
    /// 播放音效
    /// </summary>
    /// <param name="soundName"></param>
    public void PlayEffectAudio(SoundEnemy soundName, float volume)
    {
        AudioClip ac;
        if (!audioDic.ContainsKey(soundName))
        {
            ac = LoadResource.Instance.LoadObject<AudioClip>(soundName);
            audioDic.Add(soundName, ac);
        }
        else
        {
            ac = audioDic[soundName];
        }

        //AudioClip ac = Resources.Load<AudioClip>(soundName.ToString());
        if (ac != null)
        {
            effectAudio.clip = ac;
            effectAudio.volume = volume;
            //effectAudio.PlayOneShot(ac);
            //effectAudio.Play();
            AudioSource.PlayClipAtPoint(ac, transform.position);
        }

    }



    /// <summary>
    /// 停止播放 背景音乐
    /// </summary>
    public void StopAudio_Back()
    {
        backAudio.Stop();
    }
    public void StopAudio_Effect()
    {
        effectAudio.Stop();
    }


    //背景音乐  控制音量
    public float BgVolume
    {
        get
        {
            return backAudio.volume;
        }
        set
        {
            backAudio.volume = value;
        }
    }
    //音效  控制音量
    public float EffectVolume
    {
        get
        {
            return effectAudio.volume;
        }
        set
        {
            effectAudio.volume = value;
        }
    }


}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 在Resources 下加载资源
/// </summary>
public class LoadResource : MonoSingleton<LoadResource>
{

    public T LoadObject<T>(object enumName) where T : Object
    {
        Debug.Log(enumName.ToString());
        return Resources.Load<T>(enumName.ToString());
    }
}
/// <summary>
/// 音频枚举
/// </summary>
public enum SoundEnemy
{
    A, B, C, D
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 测试
/// </summary>
public class Test : MonoBehaviour
{

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            SoundControl.Instance.PlayBackAudio(SoundEnemy.A, 0.5f);
        }
        if (Input.GetKey(KeyCode.S))
        {
            SoundControl.Instance.PlayEffectAudio(SoundEnemy.C, 0.5f);
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            SoundControl.Instance.PlayBackAudio(SoundEnemy.D, 0.7f);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yuan_bowen/article/details/80527307