PlayerPrefs 를 이용한 배경음악 재생 컨트롤시에 주의해야할 Audio Source의 Play On Awake
/// <summary>
/// Unity's Start method.
/// </summary>
private void Start()
{
    var music = PlayerPrefs.GetInt("music_enabled");
    //audioSource.mute = music == 0;
    if (music==1)
    {
        audioSource.Play();
    }
}

 

현재 BackgroundMusic 클래스에서 사용하는 Start 메서드인데, 이 상황에서 게임내의 설정 팝업창에서 설정한 music_enabled 라는 이름의 PlayerPrefs 에 따라서 초기에 씬을 재시작 하고나서 음악을 재생시킬것인지, 혹은 음악을 정지 시킨채로 있을것인지에 대한 실행에서,  var music = PlayerPrefs.GetInt("music_enabled"); 를 통해 할당한뒤 사용하는 int music 의 값이 0인 경우에도 BackgroundMusics의 Audio Source가 지속적으로 재생되는 현상이 발생해서 Popup 창과 BackgroundMusic 클래스와 SoundManager 클래스 내에서의 코드에 로직에서 오류가 발생했다고 생각해서 검토를 여러번 하였다. 그런데 코드의 로직상으로는 그러한 경우에 Audio Source를 재생하는 로직이 전혀 없어서 BackgroundMusics 오브젝트의 Audio Source 컴포넌트를 보니 Play On Awake 옵션이 체크 되어있는 것을 발견할 수 있었다. 

 

Play On Awake 가 체크되어 있는 상태. 코드 로직에서는 재생 하는 게 없어도 이에 영향을 받아 지속적으로 씬이 리로드 될때 재생된다.

 

코드 로직으로 사용자의 설정에 따라서 음악을 완전히 키고 끄고 하는 형태로 코드 로직을 작성하는 경우, 이와같이 Player On Awake 속성이 체크되어 있는 것은 아닌지 확인해보도록 하자. 기존의 코드는 Audio Source 를 mute 하는 형태로 동작해서 문제를 발견하지 못했는데, 설정을 마치면 음악을 완전히 다시 처음부터 다시 시작, 종료 하는 형태로 코드를 수정하며 발생한 문제였다. 

 

Audio Source 를 제어할때 Player On Awake 체크박스를 항상 신경쓰자. 

 

  Comments,     Trackbacks