프로젝트 진행하면서 공부한 사항들을 작성해보았다.
구현하고자 한 사항
1. Title Scene과 배경음
2. 배경음이 게임 신에서도 들릴 것
3. 배경음을 원하는 타이밍에 재생시키기

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

빈 오브젝트에 AudioSource 컴포넌트를 이용해 재생하였다.
PlayOnAwake를 통해 게임이 실행되면서 바로 노래가 재생된다.
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]으로 현재 재생하는 컷신이 첫번째 컷신인지 판단 후에 배경음을 종료하고, 자연 노래를 재생하였다.