팀 프로젝트
오늘은 SoundManager를 만들어서 BGM을 넣었다.
Unity : SoundManager
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class SoundManager : MonoBehaviour
{
public static SoundManager I;
[SerializeField] AudioClip BGMClip; // 오디오 소스들 지정.
[SerializeField] AudioClip[] audioClip; // 오디오 소스들 지정.
Dictionary<string, AudioClip> audioClipsDic;
AudioSource sfxPlayer;
AudioSource bgmPlayer;
public float masterVolumeSFX = 1f;
public float masterVolumeBGM = 1f;
void Awake()
{
if (I == null)
{
I = this;
AwakeAfter();
}
else if (I != this)
{
Destroy(gameObject);
}
DontDestroyOnLoad(gameObject);
}
void AwakeAfter()
{
sfxPlayer = GetComponent<AudioSource>();
SetupBGM();
audioClipsDic = new Dictionary<string, AudioClip>();
foreach (AudioClip a in audioClip)
{
audioClipsDic.Add(a.name, a);
}
}
void SetupBGM()
{
if (BGMClip == null) return;
GameObject child = new GameObject("BGM");
child.transform.SetParent(transform);
bgmPlayer = child.AddComponent<AudioSource>();
bgmPlayer.clip = BGMClip;
bgmPlayer.volume = masterVolumeBGM;
}
private void Start()
{
if (bgmPlayer != null)
bgmPlayer.Play();
}
public void PlaySound(string a_name)
{
PlaySound(a_name, 1);
}
public void PlaySound(string a_name, float a_volume)
{
if (audioClipsDic.ContainsKey(a_name) == false)
{
Debug.Log(a_name + " is not Contained audioClipsDic");
return;
}
sfxPlayer.PlayOneShot(audioClipsDic[a_name], a_volume * masterVolumeSFX);
}
#region 옵션에서 볼륨조절
public void SetVolumeSFX(float a_volume)
{
masterVolumeSFX = a_volume;
}
public void SetVolumeBGM(float a_volume)
{
masterVolumeBGM = a_volume;
bgmPlayer.volume = masterVolumeBGM;
}
#endregion
}