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);
}
}
}