public class SoundManager
{
// 오디오 클립 캐싱을 위해 선언
Dictionary<string, AudioClip> _audioClips = new Dictionary<string, AudioClip> ();
// 화면을 넘길때 모든 클립을 날린다.
public void Clear()
{
foreach (AudioSource audioSource in _audioSources)
{
audioSource.clip = null;
audioSource.Stop();
}
_audioClips.Clear();
}
...
// 오디오클립 캐싱을 위한 용도
AudioClip GetOrAddAudioClip(string path)
{
AudioClip audioClip = null;
if (_audioClips.TryGetValue(path, out audioClip) == false)
{
audioClip = Managers.Resource.Load<AudioClip>(path);
_audioClips.Add(path, audioClip);
}
return audioClip;
}
}
기존에는 일일이 ResourceManager의 Load함수를 통해 클립에 접근해서 부담이 되었다.
그걸 해결하기 위해 GetOrAddAudioClip함수를 만들었다.
Clear함수는 씬 전환이 있을때 메모리를 비우기 위해 만들었다.
public static void Clear()
{
Input.Clear();
Sound.Clear();
Scene.Clear();
UI.Clear();
}
사운드 뿐만 아니라 다른 매니저에 대해서도 Clear()함수를 구현해 주었다.