9일차 - 폭발효과음 내기
먼저 이번에 사용할 사운드 파일을 하나 골라서 다운받아 줍시다.
그리고 sound 폴더를 만들어서 관리해주고, 그 안에 사운드 파일을 넣어줍시다.
그리고 Empty 오브젝트를 하나 추가해서
SoundManager라고 이름 붙여줍시다.
그리고 Audio Source 컴포넌트를 AddComponent로 추가해주고 스크립트를 작성해 줄건데요.
public class soundManager : MonoBehaviour {
public AudioClip soundExplosion; //재생할 소리를 변수로 담습니다.
AudioSource myAudio; //AudioSorce 컴포넌트를 변수로 담습니다.
public static soundManager instance; //자기자신을 변수로 담습니다.
void Awake() //Start보다도 먼저, 객체가 생성될때 호출됩니다
{
if (soundManager.instance == null) //incetance가 비어있는지 검사합니다.
{
soundManager.instance = this; //자기자신을 담습니다.
}
}
void Start () {
myAudio = this.gameObject.GetComponent<AudioSource>(); //AudioSource 오브젝트를 변수로 담습니다.
}
public void PlaySound()
{
myAudio.PlayOneShot(soundExplosion); //soundExplosion을 재생합니다.
}
void Update () {
}
}
static을 사용 함으로써 정적인 객체가 되었고, 어디에서나 접근 가능하게 되었습니다.
이를통해 객체가 충돌하는 부분에 soundManager.instance.PlaySound()라는 한줄을 추가하는 것으로써 소리를 낼 수 있게 되었습니다.
Awake에 관하여
제가 Start는 씬이 생성될때 처음에만 호출되는 함수라고 했는데 Awake도 라뇨? 라고 의문을 가질 수 있지만 다른점이 있습니다. 객체는 활성화, 비활성화 상태를 가질 수 있는데, 객체가 비활성화 되었다가 활성화로 돌아가면 Start부터 호출되게 됩니다. 그에 비해 Awake는 단 한번만 실행됨을 보장 할 수 있는거죠.