슬라이드 바로 사운드 조절하기 - TeamCrazyPerformance/Game_study GitHub Wiki
- GameManager는 게임의 주요 로직을 관리하는 클래스이다.
- 게임 진행 상태, 게임 플레이어, 적의 움직임, 충돌 감지, 게임 상태 변화 등과 같은 게임 로직을 처리한다. GameManager는 게임의 주요 컨트롤러 역할을 수행하며, 게임 진행을 제어하고 조정한다.
- SoundManager는 게임 내에서 사운드와 관련된 기능을 관리하는 클래스이다.
- 주로 배경 음악(BGM) 재생, 사운드 이펙트 재생, 볼륨 조절 등의 작업을 처리한다. SoundManager는 게임의 오디오 리소스를 관리하고, 사운드 재생을 위한 인터페이스를 제공한다.
- 아래 그림과 같이 마스터 볼륨, BGM, 임펙트 사운드를 관리하는 경우이다.
- "SoundManager"를 빈(Empty) 오브젝트로 생성 후 위 스크립트 적용
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager instance;
// 볼륨 값 변수들
public float masterVolume = 1.0f; // 마스터 볼륨
public float bgmVolume = 1.0f; // BGM 볼륨
public float soundEffectVolume = 1.0f; // 사운드 이펙트 볼륨
private void Awake()
{
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
}
// BGM 재생
public void PlayBGM(AudioClip bgmClip)
{
// 마스터 볼륨과 BGM 볼륨 곱 연산 적용
float volume = masterVolume * bgmVolume;
}
// 사운드 이펙트 재생
public void PlaySoundEffect(AudioClip soundEffectClip)
{
// 마스터 볼륨과 사운드 이펙트 볼륨 곱 연산 적용
float volume = masterVolume * soundEffectVolume;
}
}
- 옵션 전체를 다루는 스크립트 "Option Controller"
using UnityEngine;
using UnityEngine.UI;
public class OptionController : MonoBehaviour
{
public Slider bgmSlider;
public Slider soundEffectSlider;
public Slider masterVolumeSlider;
void Start()
{
// 저장된 볼륨 값 로드
SoundManager soundManager = SoundManager.instance;
bgmSlider.value = soundManager.bgmVolume;
soundEffectSlider.value = soundManager.soundEffectVolume;
masterVolumeSlider.value = soundManager.masterVolume;
// 슬라이더의 값이 변경될 때마다 OnVolumeChanged 메서드를 호출하도록 함
bgmSlider.onValueChanged.AddListener(OnBgmVolumeChanged);
soundEffectSlider.onValueChanged.AddListener(OnSoundEffectVolumeChanged);
masterVolumeSlider.onValueChanged.AddListener(OnMasterVolumeChanged);
}
void OnBgmVolumeChanged(float value)
{
// BGM 볼륨 값을 변경
SoundManager soundManager = SoundManager.instance;
soundManager.bgmVolume = value;
}
void OnSoundEffectVolumeChanged(float value)
{
// 사운드 이펙트 볼륨 값을 변경
SoundManager soundManager = SoundManager.instance;
soundManager.soundEffectVolume = value;
}
void OnMasterVolumeChanged(float value)
{
// 마스터 볼륨 값을 변경
SoundManager soundManager = SoundManager.instance;
soundManager.masterVolume = value;
}
}
위와 같이 적용이 되었다면, 직접 사운드를 불러보자. "SoundManager"에서 정의한 PlayBGM 혹은 PlaySoundEffect를 호출하여 사운드를 출력하거나, 오디오 소스가 적용된 오브젝트의 소리 크기를 조절하는 방식으로 사용할 수 있다. 이 때, 오디오 소스의 "Play On Awake"가 off 되어 있다면 Play함수를 추가해야 한다.
SoundManager.instance.PlayBGM(사운드 클립)
SoundManager.instance.PlaySoundEffect(사운드 클립)
오디오 소스가 적용된 오브젝트.GetComponent().volume = SoundManager.instance.volume;
오디오 소스가 적용된 오브젝트.GetComponent().Play();