Game Development, 게임개발/개발

배경음악 설정하기, 볼륨 조절, 씬이동에도 지속하기 [Unity]

게임이 더 좋아 2021. 4. 8. 05:11
반응형
728x170

 

이 글에서 다룰 것은 2가지

씬 이동에도 배경음악이 흐르게 하기

배경음악 소리 조절하기

 

바로 들어가보자.

 


 

요약

게임이 시작하면 배경음악이 흐름

다른 씬으로 넘어가더라도 음악이 흐름

옵션에서 배경음악의 크기를 조절하게끔 하고 싶음

 


 

오디오 소스를 넣기 위해 오브젝트를 만든다.

 

WIndow -> Audio 에서 Audio Mixer를 열어준다.

 

 

 Group에 Music이라는 다른 믹서를 만들어준다. (배경음악만 조절하기 위함)

 Music을 클릭하면 Inspector 창에 뜬다.

우클릭을 하여 expose를 해준다.

 

그다음 자기가 원하는 Parameter이름을 설정해준다.

 

지금까지 한 작업

볼륨믹서를 만들어 배경음악만 조절하기 위한 준비

볼륨믹서를 스크립트에서 조절하기 위한 준비

배경음악을 플레이해주는 오브젝트 생성

 


 

그 다음

 

아무 음악이나 넣어보자 어차피 된다면 음악만 바꾸면 될 것이다.

 

이 오브젝트가 바로 음악을 플레이해주는 주체이다.

스크립트로 음악을 틀어주자

사실, null check만 하면 되는데.. 그냥 처음엔 저렇게 짰다.

다른 분들을 보면 null check만 하더라.. 하지만 초보는 저렇게 짤 확률이 높기 때문에 냅뒀다.

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

public class AudioPlay : MonoBehaviour
{
    private AudioSource audioSource;
    private GameObject[] musics;

    private void Awake()
    {
        musics = GameObject.FindGameObjectsWithTag("Music");

        if(musics.Length >= 2)
        {
            Destroy(this.gameObject);
        }

        DontDestroyOnLoad(transform.gameObject);
        audioSource = GetComponent<AudioSource>();
    }

    public void PlayMusic()
    {
        if (audioSource.isPlaying) return;
        audioSource.Play();
    }

    public void StopMusic()
    {
        audioSource.Stop();
    }
}

 

Awake에서 오브젝트의 유일성을 보장받는다.

배경음악을 한 번만 틀어주는 것이다.

그리고 이 오브젝트는 씬이동에도 파괴되지 않는다.

 

 

잘 재생된다.

 


 

이제 배경음악을 조절해볼 차례다.

우리는 Slider라는 것으로 많이 조절한다.

그래서 UI에서 Slider를 이용하기로 하였다.

Slider의 범위는 이렇게 한다.

-> 로그로 조절한다고 했다.

 

또한 Linear한 볼륨 조절은 조절하기 힘들기 때문에 Logarithm 볼륨 조절을 택했다.

++dB에 대해 알고 있다면 dB 수치는 선형이 아닌 것을 알 것이다.

 

Slider를 이렇게 짜야한다.

 

당연히 On Value Changed 로 배경음악을 바로바로 조절한다.

스크립트는 이렇게 구성한다.

 

아까 믹서에서 스크립트를 이용하기 위해 썼던 parameter를 이용한다.

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

public class SetVolume : MonoBehaviour
{

    public AudioMixer mixer;
    public Slider slider;

    void Start()
    {
        slider.value = PlayerPrefs.GetFloat("MusicVolume", 0.75f);
    }
    public void SetLevel(float sliderValue)
    {
        mixer.SetFloat("MusicVolume", Mathf.Log10(sliderValue) * 20);
        PlayerPrefs.SetFloat("MusicVolume", sliderValue);
    }
}

 

또한 Start에서 초기화해줘야 한다.

SetFloat에서 Logarthm으로 조절하기 위해 저런 식이 나왔다.

 

실행해보면 잘 작동한다.

 

 

 


 

 

사실 이거 하는 것은 별로 중요하지 않다고 생각한다.

어디서든 찾으면 나오니까

 

중요한 것은 개념이다. 

개념을 알아야 이용가능하다.

오늘 알게된 개념을 정리해보자

 

Audio 로 소리를 그룹지어서 개별적으로 조절이 가능하다.

씬 이동에도 무엇인가 유지하기 위해서는 DontDestroyOnLoad() 를 쓴다.

Playerprefs에는 float을 저장할 수 있다.

소리는 Logarithm으로 조절하는 것이 좋다.

 

 

 

 

728x90
반응형
그리드형