▣ 설명:
싱글톤 패턴: SoundManager 클래스는 싱글톤 패턴을 사용하여 하나의 인스턴스만 유지하고, 이를 통해 어디서든 접근할 수 있도록 했습니다.
AudioSource 컴포넌트: bgmSource는 배경음악을 재생할 때 사용하고, sfxSource는 효과음을 재생할 때 사용합니다.
배경음 및 효과음 재생: PlayBGM()과 PlaySFX() 함수는 지정된 인덱스의 사운드를 재생합니다.
배경음/효과음 멈춤: StopBGM()과 StopSFX() 함수로 각각 배경음과 효과음을 멈출 수 있습니다.
Dictionary 사용: Dictionary<string, AudioClip>을 사용하여 배경음과 효과음을 이름으로 관리할 수 있게 했습니다. 이를 통해 사운드를 이름으로 검색하고 재생할 수 있습니다.
NamedAudioClip 구조체: Inspector 창에서 이름과 함께 오디오 클립을 설정할 수 있도록 NamedAudioClip 구조체를 추가했습니다. 이렇게 하면 사운드를 직관적으로 설정할 수 있습니다.
초기화 함수: InitializeAudioClips() 함수를 사용하여 Inspector에서 설정한 bgmClipList와 sfxClipList의 데이터를 Dictionary에 저장합니다. 이를 통해 이름으로 사운드를 찾을 수 있게 됩니다.
배경음/효과음 재생: PlayBGM(string name)과 PlaySFX(string name) 메서드에서 인덱스 대신 이름을 사용하여 배경음과 효과음을 재생합니다.
SetBGMVolume(float volume) 함수: 배경음의 볼륨을 조절합니다. volume 파라미터는 0에서 1 사이의 값이어야 하며, 0은 무음, 1은 최대 볼륨을 의미합니다.
SetSFXVolume(float volume) 함수: 효과음의 볼륨을 조절합니다. 마찬가지로 0에서 1 사이의 값으로 설정됩니다.
Mathf.Clamp() 함수: 입력받은 volume 값을 0과 1 사이로 제한하는 역할을 합니다. 이로써 잘못된 값이 입력되어도 안전하게 볼륨이 조절됩니다.
▣ SoundManager 오브젝트에 AudioSource 두 개 추가하기
SoundManager 오브젝트를 선택합니다.
Inspector 창에서 AudioSource 컴포넌트를 두 번 추가합니다.
첫 번째 AudioSource는 배경음악용.
두 번째 AudioSource는 효과음용으로 사용합니다.
각각의 AudioSource에 대해 Loop 옵션을 설정합니다:
배경음악을 위한 AudioSource는 배경음이 반복 재생되도록 Loop 옵션을 활성화하는 것이 일반적입니다.
효과음을 위한 AudioSource는 보통 1회만 재생되므로 Loop를 비활성화해 둡니다.
2. SoundManager에서 AudioSource 연결
SoundManager 스크립트에서 두 개의 AudioSource를 각각 배경음악과 효과음용으로 지정해야 합니다. 이를 위해, SoundManager 오브젝트의 Inspector에서 각 AudioSource를 연결합니다.
Inspector 창에서 SoundManager 스크립트를 확인합니다.
bgmSource와 sfxSource에 각각 배경음악용과 효과음용 AudioSource를 드래그해서 연결합니다.
▣ name: 배경음악 클립의 이름을 받아서, BGMClips 딕셔너리에서 찾아서 재생합니다.
fadeDuration: 배경음악 전환 시의 페이드 시간을 설정합니다.
Coroutine 사용: 페이드 효과를 구현하기 위해 Coroutine을 사용합니다. 현재 재생 중인 BGM이 있다면 페이드아웃을 먼저 진행한 후, 새로운 BGM을 페이드인하며 재생합니다.
FadeOutBGM: 배경음악을 페이드아웃하는 함수입니다. Mathf.Lerp를 사용하여 시작 볼륨에서 0으로 점진적으로
감소시킵니다.
FadeInBGM: 배경음악을 페이드인하는 함수입니다. Mathf.Lerp를 사용하여 볼륨을 0에서 1로 서서히 증가시킵니다.
Coroutine: 코루틴을 사용하여 시간이 경과함에 따라 볼륨을 변경하는 효과를 구현합니다.
▣ AudioSource.PlayClipAtPoint는 Unity에서 특정 위치에서 3D 사운드를 재생할 수 있도록 도와주는 메서드입니다.
이 메서드는 게임 오브젝트나 AudioSource가 필요 없이 지정된 월드 좌표에서 오디오 클립을 재생합니다. 주로 효과음(SFX)을 특정 위치에서 재생할 때 유용하게 사용됩니다.
▣ BGM (Background Music)은 일반적으로 3D 사운드가 아닌 2D 사운드로 설정하여,
위치에 관계없이 게임 전체에서 들릴 수 있도록 관리합니다.
BGM은 게임의 분위기나 상황에 맞춰 재생되는 음악이므로, 게임의 특정 위치가 아닌, 플레이어가 항상 들을 수 있도록 설정하는 것이 좋습니다.
이를 위해서는 BGM을 재생할 AudioSource가 2D 사운드로 설정되어 있어야 합니다.
AudioSource의 Spatial Blend 값을 0으로 설정하여 2D 사운드로 만들면, 사운드가 위치와 상관없이 균일하게 들리게 됩니다.
https://docs.unity3d.com/ScriptReference/AudioSource.html
https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html
'[ Unity ] > - 유니티 실습' 카테고리의 다른 글
유니티 3D ParticleSystem (0) | 2024.09.08 |
---|---|
유니티 제네릭(Generic) (1) | 2024.09.07 |
유니티 2D AI 스폰 (0) | 2024.09.05 |
유니티 2D AI 추적시스템 (0) | 2024.09.05 |
유니티 오브젝트 풀링 (2) | 2024.09.04 |
댓글