181 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| public class AudioManager : D_MonoSingleton<AudioManager>
 | |
| {
 | |
|     AudioListener mAudioListener;
 | |
|     AudioSource mMusicPlayer;
 | |
|     AudioSource mSoundPlayer;
 | |
| 
 | |
|     private Dictionary<AudioClipType, List<AudioClip>> mAudioDic = new Dictionary<AudioClipType, List<AudioClip>>();
 | |
| 
 | |
|     protected override void Initialize()
 | |
|     {
 | |
|         for (int i = 0; i < AudioConfig.Instance.AudioPacks.Count; i++)
 | |
|         {
 | |
|             AudioPack tPack = AudioConfig.Instance.AudioPacks[i];
 | |
|             if (!mAudioDic.ContainsKey(tPack.myType))
 | |
|             {
 | |
|                 mAudioDic[tPack.myType] = new List<AudioClip>();
 | |
|             }
 | |
| 
 | |
|             mAudioDic[tPack.myType] = tPack.myClips;
 | |
|         }
 | |
| 
 | |
|         CheckAudioListner();
 | |
|         CheckMusicPlayer();
 | |
|         CheckSoundPlayer();
 | |
|     }
 | |
| 
 | |
|     private void CheckAudioListner()
 | |
|     {
 | |
|         if (mAudioListener == null)
 | |
|             mAudioListener = gameObject.AddComponent<AudioListener>();
 | |
|     }
 | |
| 
 | |
|     private void CheckMusicPlayer()
 | |
|     {
 | |
|         if (mMusicPlayer == null)
 | |
|             mMusicPlayer = gameObject.AddComponent<AudioSource>();
 | |
|     }
 | |
| 
 | |
|     private void CheckSoundPlayer()
 | |
|     {
 | |
|         if (mSoundPlayer == null)
 | |
|             mSoundPlayer = gameObject.AddComponent<AudioSource>();
 | |
|     }
 | |
| 
 | |
|     //private void Update()
 | |
|     //{
 | |
|     //    if (AudioListener.pause && mIsListenerOn)
 | |
|     //    {
 | |
|     //        AudioListener.pause = false;
 | |
|     //    }
 | |
|     //    else if (!AudioListener.pause && !mIsListenerOn)
 | |
|     //    {
 | |
|     //        AudioListener.pause = true;
 | |
|     //    }
 | |
|     //}
 | |
| 
 | |
|     public void SetListenerOn(bool pIsOn)
 | |
|     {
 | |
|         AudioListener.pause = !pIsOn;
 | |
|     }
 | |
| 
 | |
|     public void SetMusicOn(bool pIsOn)
 | |
|     {
 | |
|         mMusicPlayer.enabled = pIsOn;
 | |
|     }
 | |
| 
 | |
|     public void SetSoundOn(bool pIsOn)
 | |
|     {
 | |
|         mSoundPlayer.enabled = pIsOn;
 | |
|     }
 | |
| 
 | |
|     public void PlayBGMusic(AudioClipType pType, float pVolumeScale = 1)
 | |
|     {
 | |
|         CheckMusicPlayer();
 | |
| 
 | |
|         AudioClip tClip = GetClip(pType);
 | |
|         if (tClip == null)
 | |
|             return;
 | |
| 
 | |
|         if (mMusicPlayer.enabled)
 | |
|         {
 | |
|             mMusicPlayer.clip = tClip;
 | |
|             mMusicPlayer.loop = true;
 | |
|             mMusicPlayer.volume *= pVolumeScale;
 | |
|             mMusicPlayer.Play();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void StopBGMusic()
 | |
|     {
 | |
|         CheckMusicPlayer();
 | |
| 
 | |
|         if (mMusicPlayer.enabled)
 | |
|         {
 | |
|             mMusicPlayer.Stop();
 | |
|             mMusicPlayer.clip = null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void PlaySound(AudioClipType pType, float pVolumeScale = 1)
 | |
|     {
 | |
|         CheckSoundPlayer();
 | |
| 
 | |
|         AudioClip tClip = GetClip(pType);
 | |
|         if (tClip == null)
 | |
|             return;
 | |
| 
 | |
|         if (mSoundPlayer.enabled)
 | |
|         {
 | |
|             mSoundPlayer.PlayOneShot(tClip, pVolumeScale);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void PlaySound(AudioClip pClip, float pVolumeScale = 1)
 | |
|     {
 | |
|         CheckSoundPlayer();
 | |
| 
 | |
|         AudioClip tClip = pClip;
 | |
|         if (tClip == null)
 | |
|             return;
 | |
| 
 | |
|         if (mSoundPlayer.enabled)
 | |
|         {
 | |
|             mSoundPlayer.PlayOneShot(tClip, pVolumeScale);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void PlaySound3D(AudioSource pAudioSrc, AudioClipType pType)
 | |
|     {
 | |
|         AudioClip tClip = GetClip(pType);
 | |
|         if (tClip == null)
 | |
|             return;
 | |
| 
 | |
|         if (pAudioSrc.enabled)
 | |
|         {
 | |
|             pAudioSrc.PlayOneShot(tClip);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public AudioSource PlaySoundLoop(AudioClipType pType, float pVolumeScale = 1)
 | |
|     {
 | |
|         AudioClip tClip = GetClip(pType);
 | |
|         if (tClip == null)
 | |
|             return null;
 | |
| 
 | |
|         AudioSource tLoopAudio = gameObject.AddComponent<AudioSource>();
 | |
|         tLoopAudio.clip = tClip;
 | |
|         tLoopAudio.loop = true;
 | |
|         tLoopAudio.volume *= pVolumeScale;
 | |
|         if (mSoundPlayer.enabled)
 | |
|         {
 | |
|             tLoopAudio.Play();
 | |
|         }
 | |
| 
 | |
|         return tLoopAudio;
 | |
|     }
 | |
| 
 | |
|     public void StopSoundLoop(AudioSource pAudioSrc)
 | |
|     {
 | |
|         if (pAudioSrc == null)
 | |
|             return;
 | |
| 
 | |
|         pAudioSrc.Stop();
 | |
|         Destroy(pAudioSrc);
 | |
|     }
 | |
| 
 | |
|     private AudioClip GetClip(AudioClipType pType)
 | |
|     {
 | |
|         if (!mAudioDic.ContainsKey(pType) || mAudioDic[pType].Count == 0)
 | |
|             return null;
 | |
| 
 | |
|         List<AudioClip> tClips = mAudioDic[pType];
 | |
|         int tRandomPlayIndex = UnityEngine.Random.Range(0, tClips.Count);
 | |
| 
 | |
|         return tClips[tRandomPlayIndex];
 | |
|     }
 | |
| } |