배경음악과 효과음을 사용하기 위해 사운드 매니저를 제작해보고 있다.
현재 사운드 매니저의 제작 목적은 특정 상황에서 사용될 배경음악과 효과음을 설정해주고
볼륨 조절과 같은 기능을 관리하는 역할을 해주고 싶다.
public enum eBGMType
{
LobbyBGM,
InGame_NormalBGM,
InGame_ChaseBGM,
TestBGM
}
//효과음//
public enum eSFXType
{
MatchedPuzzleSFX,
UnmatchedPuzzleSFX,
}
public class SoundManager : MonoSingleton<SoundManager>
{
public AudioSource audioSource;
private Dictionary<string, AudioClip> soundPool = new Dictionary<string, AudioClip>();
[SerializeField][Range(0f, 1f)] private float bgmVolume;
protected override void Awake()
{
base.Awake();
audioSource = gameObject.GetComponent<AudioSource>();
SetBGMVolume(0.1f);
audioSource.loop = true;
}
private void Start()
{
ChangeBGM(eBGMType.TestBGM);
}
//bgm메서드//
//bgm재생 및 교체
public void ChangeBGM(eBGMType bgm)
{
StopBGM();
string bgmName = bgm.ToString();
if (soundPool.ContainsKey(bgmName))
{
audioSource.clip = soundPool[bgmName];
audioSource.Play();
return;
}
GetSoundToResource(bgmName, eCategoryType.BGM);
audioSource.clip = soundPool[bgmName];
audioSource.Play();
}
//bgm정지
public void StopBGM()
{
audioSource.Stop();
}
//bgm 볼륨조절
public void SetBGMVolume(float volume)
{
audioSource.volume = volume;
}
//효과음 메서드//
//지속적인 효과음을 재생하기 위해서 AudioClip을 넘겨주는 방식의 메서드
public AudioClip PlaySFX(eSFXType sfx)
{
string sfxName = sfx.ToString();
if (soundPool.ContainsKey(sfxName))
{
return soundPool[sfxName];
}
GetSoundToResource(sfxName, eCategoryType.Effect);
var clip = soundPool[sfxName];
return clip;
}
//매니저에서 짧은 효과음을 재생하는 메서드
public void PlayOneShotSFX(eSFXType sfx,float volume = 0.2f)
{
string sfxName = sfx.ToString();
if(soundPool.ContainsKey(sfxName))
{
var clip = soundPool[sfxName];
audioSource.PlayOneShot(clip,volume);
return;
}
else
{
GetSoundToResource(sfxName, eCategoryType.Effect);
var clip = soundPool[sfxName];
audioSource.PlayOneShot(clip, volume);
return;
}
}
//리소스에서 사운드를 가져오는 메서드
private void GetSoundToResource(string name,eCategoryType soundType)
{
if (soundPool.ContainsKey(name)) return;
var clip = ResourceManager.Instance.LoadAsset<AudioClip>(name, eAssetType.Sound, soundType);
if(clip == null) return;
soundPool.Add(name, clip);
}
}
배경음악을 조절하는 것은 어렵지 않을 것 같으나
효과음들은 각 오브젝트가 오디오소스를 통해 역할을 수행을 할예정이라
어떤식으로 가져오는 것이 좋을 지 고민중이다.
오디오 클립을 나누어 줄 때 오디오 소스를 같이 가져오는 방식도 고려중이다.
'TIL' 카테고리의 다른 글
2024 12 27 TIL (0) | 2024.12.27 |
---|---|
2024 12 26 TIL (0) | 2024.12.26 |
2024 12 23 TIL (0) | 2024.12.23 |
2024 12 20 TIL (0) | 2024.12.20 |
2024 12 19 TIL (0) | 2024.12.19 |