音效管理器

2017-10-22  本文已影响0人  Kyle_An

一、首先把准备好的资源放到了 Resouces的Audios文件夹下,方便动态加载。


Paste_Image.png

二、之后,在场景中建了一个空物体当做管理音乐的控制器,将背景音乐和音效统一管理起来


Paste_Image.png
这里一定是两个AudioSource,一个用来播放背景音乐,一个用来播放音效,通常背景音乐用一个就可以了,音效是一直要变换的
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 挂载:脚本挂载到了空物体上面
/// 思路:
/// 先加载本地的音频文件放到数组里面
/// 然后将数组里面的元素存放到字典里面
/// 播放哪个音频的时候再通过元素的名字查找相对应的音频文件
/// </summary>
public class SoundManager : MonoBehaviour
{
    //------------------------------//
    /// <summary>
    /// 单例模式
    /// </summary>
    public static SoundManager instance = new SoundManager();
    private SoundManager()
    {

    }

    /// <summary>
    /// 将声音放入字典中,方便管理
    /// </summary>
    private Dictionary<string, AudioClip> _soundDictionary;
    //AudioSource组件
    private AudioSource[] audioSources;
    //声音数组
    AudioClip[] audioArray;

    private AudioSource bgAudioSource;
    private AudioSource audioSourceEffect;

    void Awake()
    {
        instance = this;
        _soundDictionary = new Dictionary<string, AudioClip>();
        //本地加载 
        audioArray = Resources.LoadAll<AudioClip>("Audios");

        audioSources = GetComponents<AudioSource>();
        bgAudioSource = audioSources[0];
        audioSourceEffect = audioSources[1];

        //存放到字典
        foreach (AudioClip item in audioArray)
        {
            _soundDictionary.Add(item.name, item);
        }
    }


    //播放背景音乐
    public void PlayBGaudio(string audioName)
    {
        if (_soundDictionary.ContainsKey(audioName))
        {
            bgAudioSource.clip = _soundDictionary[audioName];
            bgAudioSource.Play();
        }
    }
    //播放音效
    public void PlayAudioEffect(string audioEffectName)
    {
        if (_soundDictionary.ContainsKey(audioEffectName))
        {
            audioSourceEffect.clip = _soundDictionary[audioEffectName];
            audioSourceEffect.Play();
        }
    }
}

音效是一直在场景中不消失的,所以要保证切换场景的时候资源不会删除。

//=============================================//
    static bool isHaveAudio=false ;
    public GameObject tempGameObject;
    //=============================================//
    //不销毁音效
    void Start()
    {
        if (!isHaveAudio) 
        {
            tempGameObject=Instantiate(Resources.Load("SoundManage"))as GameObject;
            isHaveAudio=true ;
        }
        DontDestroyOnLoad (tempGameObject);
    }

使用:先执行加载预设(Start())脚本。
SoundManage是个预设,预设绑定SoundManager.cs脚本。

上一篇 下一篇

猜你喜欢

热点阅读