슬라이드 바로 사운드 조절하기 - TeamCrazyPerformance/Game_study GitHub Wiki

관리

  • GameManager는 게임의 주요 로직을 관리하는 클래스이다.
    • 게임 진행 상태, 게임 플레이어, 적의 움직임, 충돌 감지, 게임 상태 변화 등과 같은 게임 로직을 처리한다. GameManager는 게임의 주요 컨트롤러 역할을 수행하며, 게임 진행을 제어하고 조정한다.
  • SoundManager는 게임 내에서 사운드와 관련된 기능을 관리하는 클래스이다.
    • 주로 배경 음악(BGM) 재생, 사운드 이펙트 재생, 볼륨 조절 등의 작업을 처리한다. SoundManager는 게임의 오디오 리소스를 관리하고, 사운드 재생을 위한 인터페이스를 제공한다.

세팅

  • 아래 그림과 같이 마스터 볼륨, BGM, 임펙트 사운드를 관리하는 경우이다.
    • image
  • "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();

19 오성혁

참고

⚠️ **GitHub.com Fallback** ⚠️