본문 바로가기
유니티

[Unity] 사운드매니저 (SoundManager)

by SUGI_ 2023. 12. 20.

사운드매니저를 사용하여 게임의 배경 음악(BGM)과 효과음(SFX)을 관리합니다.

 

디자인패턴 - 싱글톤패턴으로 관리하고

'DontDestroyOnLoad' 를 통해 씬이 전환되더라도 파괴되지 않게 않게 함.

싱글톤패턴
애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴 즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴.
생성자가 여러번 호출되도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것.

 

데이터 보관 : enum(열거형)을 정의하여 다양한 종류의 배경 음악과 효과음을 나타냄.

이를 통해 코드에서 다양한 오디오 클립을 참조하고 관리하기가 더 쉬워짐.

열거형 형식
기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식
열겨형을 정의하려면 enum 키워드를 정의하고 열거형 멤버의 이름을 지정
기본적으로 열거형 멤버의 연결된 상수 값은 int 형식. 즉 0으로 시작 

 

Audio Clips  - 해당 오디오 클립을 할당

주의사항 enum 정의한 내용과 할당한 클립의 순서가 같아야 함.

Audio Sources - 배경음악과 효과음을 각각 재생하는 데 사용

 

전체코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    public static SoundManager instance;
    
    //BGM 종류들
    public enum EBgm
    {
        BGM_TITLE,
        BGM_GAME,
    }
    
    //SFX 종류들
    public enum ESfx
    {
        SFX_BUTTON,
        SFX_ENDING,
        SFX_TOKEN,
        SFX_BOTTLE,
        SFX_OPENDOOR,
        SFX_MissionClear
    }

    //audio clip 담을 수 있는 배열
    [SerializeField] AudioClip[] bgms;
    [SerializeField] AudioClip[] sfxs;

    //플레이하는 AudioSource
    [SerializeField] AudioSource audioBgm;
    [SerializeField] AudioSource audioSfx;

    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    // EBgm 열거형을 매개변수로 받아 해당하는 배경 음악 클립을 재생
    public void PlayBGM(EBgm bgmIdx)
    {
      	//enum int형으로 형변환 가능
        audioBgm.clip = bgms[(int)bgmIdx];
        audioBgm.Play();
    }

    // 현재 재생 중인 배경 음악 정지
    public void StopBGM()
    {
        audioBgm.Stop();
    }

    // ESfx 열거형을 매개변수로 받아 해당하는 효과음 클립을 재생
    public void PlaySFX(ESfx esfx)
    {
        audioSfx.PlayOneShot(sfxs[(int)esfx]);
    }
}
PlayOneShot
AudioSource 클래스의 메서드로, 짧은 효과음을 재생하는 데 사용. 주로 한 번만 재생할 효과음이나 단발성 사운드 이펙트에 유용. 한 번의 호출로 효과음을 재생하며, 효과음의 길이에 관계없이 동시에 여러 개의 효과음을 재생할 수 있음
※ 볼륨 조절 ※
public void PlayOneShot(AudioClip clip, float volumeScale = 1.0f);volumeScale (선택적) : 효과음의 볼륨 스케일을 나타냅니다. 기본값은 1.0f이며, 0.0f에서 1.0f 사이의 값을 사용하여 볼륨을 조절할 수 있습니다.

 

사용예시

    public void OnClickBack()
    {
        SoundManager.instance.PlaySFX(SoundManager.ESfx.SFX_BUTTON);
        SoundManager.instance.PlayBGM(SoundManager.EBgm.BGM_TITLE);
        
        PhotonNetwork.LoadLevel("GameLobbyScene");
    }
728x90

'유니티' 카테고리의 다른 글

[유니티 오류] 유니티 패키지 설치 오류 (No 'git' executable was found)  (0) 2024.01.10
[개발용어] 3rd party 서드파티  (0) 2024.01.09
모바일 빌드 아이콘 넣기  (0) 2023.11.28
Json 직접파싱하기  (0) 2023.11.17
CSV  (1) 2023.10.18