1. 오늘의 할 일
브금을 깔 겁니다
그런데 이제 카운트다운이 10초 남으면 알람소리가 나야하는 것.
2. 어디부터 건드려야 하지?
1. 씬을 구비한다.
뭐가 많죠?
팀플용이라 그렇습니다.
이미 오디오 매니저를 만든 것도 확인할 수 있습니다.
그렇게 작성하는 지금 오디오 매니저에 들어있는 코드
코드1
public class AudioManager : MonoBehaviour
{
public static AudioManager instance; //싱글톤
public AudioSource bgmSource; //bgmSource라는 이름으로 밑에 있는 BGM오브젝트의 오디오소스를 들고올 것
public AudioSource alertSource; //alertSource라는 이름으로 밑에 있는 Alert 오브젝트의 오디오소스를 들고올 것
private void Awake()
{
if (instance == null)
{
instance = this; //싱글톤
DontDestroyOnLoad(gameObject); //씬을 넘어가서도 부서지지 않게(BGM)
}
else
{
Destroy(gameObject);
}
}
void Start()
{
//각 소스에서 오디오소스 컴포넌트를 들고온다.
bgmSource = GetComponent<AudioSource>();
alertSource = GetComponent<AudioSource>();
PlayBGM();
}
public void PlayBGM()
{
//BGM이 안틀어져있으면, 실행한다.
if (!bgmSource.isPlaying)
{
bgmSource.Play();
}
}
public void PlayAlert()
{
//알람음이 안켜져있으면, 실행한다. (이건 게임매니저에서 부른다)
if (!alertSource.isPlaying)
{
alertSource.Play();
Debug.Log("알람on!");
}
}
public void StopAlert()
{
//알람음이 켜져있으면, 끈다. (게임매니저에서 중지한다)
if (alertSource.isPlaying)
{
alertSource.Stop();
Debug.Log("알람off!");
}
}
}
그리고 결과값.
좌측 하단에 보면 알람on! 이 뜨는 것을 보니, PlayAlert()는 확실히 불러졌다.
그러나, alertSource의 음악이 Play 되지 않으니, 카운트다운이 끝나고 불러져야할 StopAlert();는 불러지지 않은 모습이다.
그런데 bgm은 잘 됐단말이지….
그런데? BGM도 Awake를 끄니까 작동이 안됐습니다.
그럼 즉, AudioManager 라고 쓰고 전혀 작동하지 않았다는 뜻인데 무엇이 문제인가 했더니
>Clip에 음악이 들어가야하는데 Clip에 안들어갔다!!!!
입니다.
2. 다 울었으면, 그럼 이제 오류를 고치자.
기왕 이렇게 된거, 어차피 BGM은 Loop에 Awake를 켜두니 알아서 잘 돌아갔겠다, AudioManager에 Alert만 할당하면 될 것 같다.
public class AudioManager : MonoBehaviour
{ //중복코드 제외함
AudioSource alertSource;
public AudioClip Alert; //Alert라는 이름으로 AudioClip을 부름
//싱글톤 있음
void Start()
{
//오디오소스의 컴포넌트를 들고옴. alertSource의 Clip을 Alert로 지정.
alertSource = GetComponent<AudioSource>();
alertSource.clip = Alert;
}
public void PlayAlert() //GameManager에서 사용됨
{
// alertSource가 재생되지 않고있던 상태라면, 실행함.
if (!alertSource.isPlaying)
{
alertSource.Play();
}
}
public void StopAlert() //GameManager에서 사용됨
{
if (alertSource.isPlaying)
{
alertSource.Stop();
}
}
}
결과.
해냈다!!!! 정상적으로 10초가 되자 알람음이 울리고, 알람이 꺼지기도 한다.
여담으로, 파괴금지 처리를 해놓았기 때문에 저 상태로 스테이지 이동>다른 스테이지로 이동해도 정상적으로 BGM이 나오고, 10초 남았을 때는 알람음도 울린다.
3. 요약
1. AudioSource에 브금이 없던 상태에서, 브금을 넣어주고 싶다면 Clip을 쓰는 게 좋다.
(그래야 Play() 든 PlayOneShot()이든 먹힌다.)
2. 상황에 맞춰 잠깐씩 한 번만 나타나는 짧은 효과음 같은 것은 GameManager처럼 같은 곳에 넣어두고 작동 시켜도 정상적으로 작동한다.
3. 단일 브금이라면 여기처럼 그냥 오브젝트에 BGM을 넣고 반복해서 돌려도 된다. 하지만 씬이 바뀌었을 때 BGM이 바뀔 경우, BGM을 교체할 스크립트를 따로 짜야한다.
'Unity_본캠프' 카테고리의 다른 글
[내일배움캠프 1주차] 1주차 정리 (1) | 2025.04.13 |
---|---|
[내일배움캠프 5일차] 쉬어갑시다? 코루틴 (2) | 2025.04.11 |
[내일배움캠프 3일차] 카운트 다운 (1) | 2025.04.09 |
[내일배움캠프 2일차] Github (3) | 2025.04.08 |
[내일배움캠프 1일차] 카드 뒤집기 (3) | 2025.04.07 |