오디오믹서를 사용해서 배경음악 및 효과음 볼륨조절바 구현
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];
}
}
연결이 잘된거를 확인할 수 있다.
오류났던 부분
이걸 진행하면서 스킬프리펩에 분명 오디오 소스를 연결해서 오디오믹서를 연결해서 효과음바랑 연결이 됐는데도 소리가 줄어들지 않았었는데 이유가 제가 연결해 놓은 오디오소스에서 해당 효과음이 나오는게 아니라 그 자식에 붙어있는 오디오소스에서 소리가 나고 있었던 것이다. 그래서 아무리 볼륨을 줄여도소리가 줄어들지 않았던 것이다. 그래서 해당 오디오소스는 지우고 자식에 붙어있는 오디오소스로 연결을 하면서 문제를 해결했다.