팀과제 진행상황
오늘의 작업 :
SoundManager.cs
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager instance;
private AudioSource audioSource; // 음악 플레이할 친구
[SerializeField] private AudioClip bgm; // 음악 파일 그 자체
private void Awake()
{
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(this);
}
audioSource = GetComponent<AudioSource>();
DontDestroyOnLoad(gameObject);
}
// Start is called before the first frame update
private void Start()
{
PlayBGM();
}
private void PlayBGM()
{
audioSource.clip = bgm;
audioSource.Play();
}
// Update is called once per frame
//void Update()
//{
//}
}
// 싱글톤 익숙해지기 연습
이제 slider 를 활용해서 볼륨 조절하기 도전 !
UI 의 Slider 준비 (+ AudioSource 달려있는 오브젝트도 미리 준비)
Assets 안에 Create - AudioMixer
AudioSource 컴포넌트 안에 Output 에 Mixer 만든거 연결해주기
Slider 오브젝트의 Min Value 값 0.0001, Max Value 값 1 로 설정
만든 Mixer 의 Master 클릭 후 Inspector 창에서 Volume 우클릭 후 Expose 'Volume (of Master)' to script
클릭
AudioMixer 에 보면 Exposed Parameters 가 Exposed Parameters (0) 부분이 (1) 로 바뀜 ! 원하는 이름 바꿔주기
VolumeControl.cs 만들어서 Slider 오브젝트에 달아주기
using UnityEngine.Audio;
VolumeControl.cs
using UnityEngine;
using UnityEngine.Audio;
public class VolumeControl : MonoBehaviour
{
[SerializeField] private AudioMixer audioMixer;
public void SetLevel(float sliderValue)
{
// instead of just directly setting the sliderValue, we need to convert it into logarithmic value !
//Mathf.Log10() 을 통해 convert 진행하자
audioMixer.SetFloat("BGMVol", Mathf.Log10(sliderValue) * 20 );
}
}
Dynamic float 아래 있는 SetLevel
선택하기나는 VolumeControl.cs 에서 value 를 0.5f 로 지정해줌.
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;
public class VolumeControl : MonoBehaviour
{
[SerializeField] private AudioMixer audioMixer;
private Slider soundSlider;
private void Awake()
{
soundSlider = GetComponent<Slider>();
}
private void Start()
{
soundSlider.value = 0.5f;
}
public void SetLevel(float sliderValue)
{
// instead of just directly setting the sliderValue, we need to convert it into logarithmic value !
// Mathf.Log10() 을 통해 convert 진행하자
audioMixer.SetFloat("BGMVol", Mathf.Log10(sliderValue) * 20 );
}
}
Slider value range is linear while the mixer fader range is logarithmic.
Linear value 은 사운드 조절하기 힘들어서(too sensitive) Logarithmic 으로 변환해주는 것이 좋다.
Slider 의 Min Value 0.0001을 대입하면 -80, Max Value 1을 대입하면 0 이 나온다.
.SetFloat 첫번째 매개변수는 AudioMixer 에서 만든 Exposed Parameters 이름이다.
에러 :
Setting 버튼 누르기 전에는 볼륨이 큰데 버튼 누르면 볼륨이 작아지는 이슈.
해결 :
SoundManager.cs 에서 애초에 시작 볼륨을 0.5f 로 설정하고,
VolumeControl.cs 에서 Slider 의 1 값 = BGM 볼륨 0.5f
가 되게끔 코드 수정.
SoundManager.cs
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager instance;
private AudioSource audioSource; // 음악 플레이할 친구
[SerializeField] private AudioClip bgm; // 음악 파일 그 자체
private void Awake()
{
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(this);
}
audioSource = GetComponent<AudioSource>();
DontDestroyOnLoad(gameObject);
}
// Start is called before the first frame update
private void Start()
{
PlayBGM();
}
private void PlayBGM()
{
audioSource.clip = bgm;
audioSource.volume = 0.5f;
audioSource.Play();
}
}
VolumeControl.cs
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;
public class VolumeControl : MonoBehaviour
{
[SerializeField] private AudioMixer audioMixer;
private Slider soundSlider;
private void Awake()
{
soundSlider = GetComponent<Slider>();
}
private void Start()
{
soundSlider.value = 1f;
}
public void SetLevel(float sliderValue)
{
// instead of just directly setting the sliderValue, we need to convert it into logarithmic value !
// Mathf.Log10() 을 통해 convert 진행하자
audioMixer.SetFloat("BGMVol", Mathf.Log10(sliderValue) * 20 );
}
}
Happy New Year