오디오믹서를 사용해서 배경음악 및 효과음 볼륨조절바 구현

2025. 1. 9. 21:36카테고리 없음

어제 배경음악만 줄였을때 효과음이 너무 크게 들려서 오늘은 효과음을 조절하는 바를 만들어볼 것이다.

 

일단 UI를 만들어주고 사운드바 스크립트에 효과음바 함수도 추가해줬다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;

public class SoundBar : MonoBehaviour
{
    public AudioMixer mixer;
    public Slider bgmSlider;
    public Slider effectSlider;
    
    private void Start()
    {
        mixer = AudioManager.Instance.audioMixer;
        
        float currentVolume;
        if (mixer.GetFloat("BGM", out currentVolume))
        {
            bgmSlider.value = currentVolume;
        }
        
        if (mixer.GetFloat("Effect", out currentVolume))
        {
            effectSlider.value = currentVolume;
        }
    }

    public void OnBGMAudioVolum()
    {
        float sound = bgmSlider.value;
        if(sound == -40f) mixer.SetFloat("BGM", -80f);
        else mixer.SetFloat("BGM", sound);
    }

    public void OnEffectAudioVolum()
    {
        float sound = effectSlider.value;
        if(sound == -40f) mixer.SetFloat("Effect", -80f);
        else mixer.SetFloat("Effect", sound);
    }
}

 

그리고 해당 스킬프리펩 자식들한테 오디오소스가 붙어져 있어서 리소스로 스킬프리펩 가져올때 해당 자식들에 있는 오디오 소스에 접근을 해서 오디오매니저에 동적으로 만들어놓은 오디오믹서를 연결해줬다.

GameObject skillObject = Instantiate(Resources.Load<GameObject>($"Skill/{currentSkill.modelPath}"), transform);

AudioMixer audioMixer = AudioManager.Instance.audioMixer;       //스킬오브젝트 자식들한테 붙어있는 오디오소스에 접근해서 오디오믹스 넣기 

for (int i = 0; i < skillObject.transform.childCount; i++)
{
    Transform child = skillObject.transform.GetChild(i);
    
    if (child.TryGetComponent(out AudioSource audioSource))
    {
        audioSource.outputAudioMixerGroup = audioMixer.FindMatchingGroups("Effect")[0];
    }
}

 

연결이 잘된거를 확인할 수 있다.

오류났던 부분

이걸 진행하면서 스킬프리펩에 분명 오디오 소스를 연결해서 오디오믹서를 연결해서 효과음바랑 연결이 됐는데도 소리가 줄어들지 않았었는데 이유가 제가 연결해 놓은 오디오소스에서 해당 효과음이 나오는게 아니라 그 자식에 붙어있는 오디오소스에서 소리가 나고 있었던 것이다. 그래서 아무리 볼륨을 줄여도소리가 줄어들지 않았던 것이다. 그래서 해당 오디오소스는 지우고 자식에 붙어있는 오디오소스로 연결을 하면서 문제를 해결했다.