[Unity] Audio Clip, Source, Mixer / 오디오 볼륨 조절 슬라이더
1. Audio 컴포넌트
2. Audio 플레이
3. 오디오 볼륨 조절 슬라이더
📝 1. Audio컴포넌트
🔖 Audio Clip
- 재생할 수 있는 오디오 데이터
- 유니티는. aif,. wav,. mp3, 및. ogg 형식을 지원함
🔖 Audio Souce
- 씬에서 오디오를 재생할 수 있는 컴포넌트
- 2D/3D 사운드 설정 가능
🔖 AudioMixer
- 오디오 소스에 대한 제어, 균형 및 동적 조정을 제공
- 그룹화를 통한 카테고리별 사운드 관리 가능 (BGM, SFX, Voice 등)
📝2. Audio 플레이
0. 오디오를 "듣기"위해서 Main Camera에 AudioListener 컴포넌트를 달아준다
1. 오브젝트에 AudioSource 컴포넌트를 추가한다
■ AudioSource 필드에 오브젝트의 AudioSource 컴포넌트를 할당한다
■ AudioClip필드에 실행할 오디오 클립을 할당한다
2. BGMPlayer.cs
public class BGMPlayer : MonoBehaviour
{
public AudioSource source;
public AudioClip clip;
void Start()
{
source = GetComponent<AudioSource>();
// 1. Play 함수
source.Play();
// 2. PlayOnShot 함수
source.PlayOneShot(clip);
}
}
■ AudioSource.Play()
□ 해당 소스에 할당된 AudioClip을 처음부터 재생
□ 매개변수가 없음 (AudioSource 컴포넌트에 AudioClip이 미리 할당되어야 함)
■ AudioSource.PlayOneShot(AudioClip)
□ 한 번에 여러 오디오를 겹쳐 재생할 수 있음
□ 재생시킬 오디오 clip을 매개변수로 받음
□ 같은 소스에서 여러 효과음을 동시에 재생할 때 유용함
3. 실행
■ 실행하면 오디오가 1회 실행되는 것을 확인할 수 있다
■ 혹시 들리지 않는다면 게임화면의 소리가 음소거되어있는지 확인하자
📝3. 오디오 볼륨 조절 슬라이더
1. Create → Audio Mixer를 클릭하여 오디오믹서를 만든다
2. 우측 Groups에서 (+) 버튼을 눌러 그룹을 만든 뒤 이름을 BGM과 SFX로 지정한다
3. Asset폴더에 생성되어 있는 AudioMixer하위의 Master을 클릭한 후
인스펙터 창의 Volume 위에서 우클릭
→ Expose 'Volume (of Master) to script"를 클릭
■ 🔖 스크립트로 Audio Mixer의 Master / BGM / SFX 그룹에 접근하기 위해서 Expose를 해줘야 한다.
■ 볼륨 옆에 → 화살표가 뜨면 된 것이다
4. AudioSource가 할당되어 있는 오브젝트의 AudioSource → Output에 만든 AudioMixer의 그룹을 할당해 준다
■ BGM을 실행하는 오브젝트의 AudioSource뿐만 아니라 SFX를 실행하는 AudioSource에도 Output을 설정해 준다
5. AudioMixer의 파라미터 설정
■ 해당 그룹에 맞는 파라미터로 이름을 수정해 주면 된다
■ 왼쪽에 흐릿한 글씨로 Volume(of BGM)를 확인한다. BGM이면 AudioSource의 Output이 "BGM"인 경우에 해당한다.
6. AudioSlider.cs
using UnityEngine.Audio;
using UnityEngine.UI;
public class AudioSlider : MonoBehaviour
{
public AudioMixer audioMixer;
public Slider MasterSlider;
public Slider BGMSlier;
public Slider SFXSlider;
private float minVolume = -60f;
private float maxVolume = 10f;
void Start()
{
MasterSlider.onValueChanged.AddListener(SetMasterVolume);
BGMSlier.onValueChanged.AddListener(SetBGMVolume);
SFXSlider.onValueChanged.AddListener(SetSFXVolume);
}
public void SetMasterVolume(float volume)
{
audioMixer.SetFloat("Master", Mathf.Clamp(volume * 100 - 80 , minVolume , maxVolume));
}
public void SetBGMVolume(float volume)
{
audioMixer.SetFloat("BGM", Mathf.Clamp(volume * 100 - 80 , minVolume , maxVolume));
}
public void SetSFXVolume(float volume)
{
audioMixer.SetFloat("SFX", Mathf.Clamp(volume * 100 - 80 , minVolume , maxVolume));
}
}
■ Slider.onValueChanged.AddListener()
□ 슬라이더에서 값 수치가 변경될 경우에 실행됨
□ UI 슬라이더와 오디오 볼륨을 연결할 때 사용
■ AudioMixer.SetFloat(string, float)
□ 첫 번째 매개변수: 믹서에서 정의한 파라미터 이름
□ 두 번째 매개변수: 설정할 값 (일반적으로 dB 단위)
□ AudioMixer은 -80부터 +20까지 소리를 지원한다.
□ 너무 작거나, 너무 크면 소리가 깨지는 현상이 발생하기 때문에 min과 max값 사이에서 볼륨의 크기를 정한다.
■ AudioMixer.SetFloat를 지정하는 일반적인 방법
audioMixer.SetFloat("Master", Mathf.Log10(Mathf.Max(0.001f, volume)) * 20);
: 데시벨(dB)은 로그 스케일이므로 슬라이더(0~1) 변환 시 로그 함수를 권장함
7. 실행
소리는 안 들린다
■ Matser 슬라이더를 조절하면 AudioMixer에 Master 볼륨이 조절된다.
■ BGM 슬라이더를 조절하면 AudioMixer에 BGM 볼륨이 조절된다.
■ SFX 슬라이더를 조절하면 AudioMixer에 SFX 볼륨이 조절된다.