Unity 개발일지

[Unity] SoundManager로 간단하게 BGM과 효과음 넣기! - 2 - 본문

카테고리 없음

[Unity] SoundManager로 간단하게 BGM과 효과음 넣기! - 2 -

아머르 2024. 6. 11. 15:03

게임을 하다보면 맵이 바뀌지 않아도 특정 구역에 들어갔을 때 BGM이 바뀌는 것을 본 적이 있을것이다.

오늘은 특정 지역에 들어갔을 때 BGM이 바뀌는 것을 구현하겠다.

 

[계획]

1. 빈 Object에 BoxCollider를 넣은 후 IsTrigger 를 체크하여 진입 시 작용을 할 수 있게 해준다.

2. Player의 태그가 붙은 물체와 충돌 했을 때 OnTriggerEnter와 OnTriggerExit으로 BGM을 바꿔준다.

 

 

[구현]

 

빈 오브젝트에

 

 

 

 

 

BoxCollider의 IsTrigger를 체크해주고

Collider 범위를 설정해준다.

 

 

 

 

 

 

 

AudioSource 컴포넌트를 등록한 후

AudioClip에 재생할 BGM을 등록한 후

Play On Awake와 Loop에 체크를 한다.

 

 

 

 

 

 

 

 

 

 

BGMZone 스크립트를 등록해준다.

 

 

<BGMZone 스크립트>

 

필요한 변수들을 선언한다.

 

 

 

 

Start 시

targetVolume을 0으로 설정, AudioSource 컴포넌트를 가져온다.

audioSource의 볼륨은 targetVolume인 0으로 해준다.

 

 

해당 코드는 audioSource의 볼륨을 점진적으로 변경하여 목표 볼륨(targetVolume)으로 이동시켜준다.

이 코드를 이용하여 오디오 볼륨의 점진적인 페이드 인(fade in) 또는 페이드 아웃(fade out)을 구현할 수 있다.

 

Mathf.Approximately(a, b)

a와 b가 거의 같은지 여부를 판단. 부동 소수점 연산의 특성상, 두 값이 정확히 같은지 비교하기 어려운 경우가 많기 때문에, Approximately 메서드는 두 값이 일정 오차 범위 내에서 같은지 여부를 확인한다.

 

Mathf.MoveTowards(current, target, maxDelta)

current 값에서 target 값으로 maxDelta만큼 점진적으로 변화시킨다. maxDelta는 한 프레임 동안 변경될 최대 값.

 

(maxVolume / fadeTime) * Time.deltaTime: 초당 볼륨 변화량(maxDelta)

 

 

Player Tag를 가진 물체가 Enter 시

MainBGM 재생을 중단

targetVolume으로 SoundManager의 볼륨을

가져오고 재생한다.

 

 

 

Player Tag를 가진 물체가 Exit 시

targetVolume을 다시 0으로 변경

BGM재생을 멈추고

MainBGM을 다시 재생해준다.

 

 

여러가지 초기화 작업은 SoundManager에 이미 실행해 놨으므로 그대로 함수를 가져다 쓰면 된다.

 

AudioSource는 GetComponent로 가져오니 등록해줄 필요가 없고, FadeTime은 1로 설정했다.

반응형