#33 TitleScene, SoundManager

국기웅·2024년 6월 10일

프로젝트 진행하면서 공부한 사항들을 작성해보았다.

구현하고자 한 사항
1. Title Scene과 배경음
2. 배경음이 게임 신에서도 들릴 것
3. 배경음을 원하는 타이밍에 재생시키기

1. TitleScene

UI는 이미지와 버튼으로 조합하였다.
배경 노래는 SoundManager를 사용했다.

빈 오브젝트에 AudioSource 컴포넌트를 이용해 재생하였다.
PlayOnAwake를 통해 게임이 실행되면서 바로 노래가 재생된다.

2. 배경음이 게임 신에서도 들릴 것

SoundManager스크립트를 다음과 같이 작성하였다.


public class SoundManager : MonoBehaviour
{
    private static SoundManager _instance;

    private AudioSource audiosource;
    public AudioClip DungeonClip;
    public AudioClip MutantSong;
    public AudioClip MutantTalkClip;
    public AudioClip NatureClip;

    public static SoundManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new GameObject("SoundManager").AddComponent<SoundManager>();
            }
            return _instance;
        }
    }

    private void Awake()
    {
        if(_instance == null)
        {
            _instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            if(_instance != null)
            {
                Destroy(gameObject);
            }
        }
        audiosource = GetComponent<AudioSource>();
    }

    public void BackgroundMusicMute()
    {
        audiosource.Stop();
    }

    public void MutantMusicOn()
    {
        audiosource.clip = MutantSong;
        audiosource.Play();
    }
    public void DungeonMusicOn() 
    {
        audiosource.clip = DungeonClip;
        audiosource.Play();
    }
    public void MutantTalkMusicOn()
    {
        audiosource.clip = MutantTalkClip;
        audiosource.Play();
    }

    public void NatureMusicOn()
    {
        audiosource.clip= NatureClip;
        audiosource.Play();
    }
}

우선 Singleton으로 선언하여 다른 객체가 접근할 수 있도록 하였다.
동시에 신 전환시 오브젝트를 그대로 가져가게 하기 위하여 DontDestroyOnLoad(gameobject)를 사용했다.

시작 버튼에 다음 스크립트를 추가하였다.

public class StartBtn : MonoBehaviour
{
    public void StartGame()
    {
        SceneManager.LoadScene(1);
        SoundManager.Instance.DungeonMusicOn();
    }
}

신 전환을 하고, 던전 노래를 재생하게 만들었다.
따라서 MainScene에 진입 시 다른 노래가 계속해서 재생된다.

배경음을 원하는 타이밍에 재생시키기

이제 남은 부분은 어렵지 않다.
위에 SoundManager 스크립트를 보면 각종 메서드로 clip을 바꿔주고있다.
audiosource는 노래를 재생하는 기기, clip은 재생할 미디어라고 보면 이해하기 쉽다.

예를들어 컷신 종료 시 자연 노래 재생은 다음과 같다

	private void Director_Stopped(PlayableDirector director)
	{
		CharacterManager.Instance.Player.Controller.ChangeControlable(true);
		if(QuestUI != null)
			QuestUI.SetActive(true);
		if(Subtitle != null) Subtitle.SetActive(false);

		if(_director == Directors[0])
		{
			SoundManager.Instance.BackgroundMusicMute();
			SoundManager.Instance.NatureMusicOn();
		}
		director.gameObject.SetActive(false);
        
    }

_director == Directors[0]으로 현재 재생하는 컷신이 첫번째 컷신인지 판단 후에 배경음을 종료하고, 자연 노래를 재생하였다.

profile
게임개발호소인

0개의 댓글