본문 바로가기
[ Unity ]/- 유니티 실습

유니티 SoundManager

by MRG 2024. 9. 6.
728x90
반응형

 

▣ 설명:
싱글톤 패턴: 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

 

Unity - Scripting API: AudioSource

An AudioSource is attached to a GameObject for playing back sounds in a 3D environment. In order to play 3D sounds you also need to have a AudioListener. The audio listener is normally attached to the camera you want to use. Whether sounds are played in 3D

docs.unity3d.com

https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

 

Unity - Scripting API: Mathf.Clamp

Returns the minimum value if the given float value is less than the minimum. Returns the maximum value if the given value is greater than the maximum value. Use Clamp to restrict a value to a range that is defined by the minimum and maximum values. Returns

docs.unity3d.com

 

 

 

 

728x90
반응형

'[ 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

댓글