카테고리 없음

유니티 - 사운드 컨트롤

bugmin 2024. 6. 13. 12:48
AudioClip

 

사운드 파일(데이터)을 담당하는 컴포넌트 타입

 

AudioSource

 

AudioClip을 연결하여 재생할 수 있도록 하는 컴포넌트

볼륨 조절, 반복 재생등의 설정이 있다.

 

AudioListener

 

오디오를 듣는 역할을 해 얘가 없으면 아예 소리가 안들리며 일반적으로 메인 카메라에 달려있다.

하나만 존재해야한다.

 

SoundManager.cs

 

게임 매니저 자식으로 SoundManager 오브젝트를 추가하고 아래의 SoundManager 스크립트를 부착한다.

 

Stop과 같이 항상 뭔가를 실행한다하면 한 번 껐다 켜는 것이 도움이 된다. 코루틴서도 습관을 들이자

 

사운드의 피치를 조절하면 피치가 높을 수록 고음의 소리가 나게 되는데 이런 것을 활용해 한가지 소리로 다양한 소리를 만들 수 있다.

또한 같은 동작이라도 똑같은 소리가 반복되면 유저들이 빨리 지친다는 연구결과가 있다고도 한다.

(ex. 과거 포켓몬서 울음소리의 피치나 재생 속도를 조절해 다양한 울음소리를 구현한 적이 있다 한다) 

 

static으로 PlayClip 함수를 만들어두었기에

 

ShootingClip은 AudioClip 변수다

 

위와 같이 다른 클래스에서도 SoundManager 클래스를 통해 바로 함수에 접근할 수 있다.

 

SoundSource.cs

 

SoundSource 클래스가 왜 있냐하면 어떤 이팩트를 풀링해서 가져올 지를 모르니 SoundSource 클래스를 두어 작업을 하는 것이라 보면 된다.

 

피치 값은 플레이에 재미를 더하고자 랜덤으로 설정하는 모습이다.

 

 

SoundSource 프리펩을 만들고 GameManager의 오브젝트 풀에 추가하면 된다.

 

 

오브젝트 풀에 추가해준 모습이다.

오브젝트 풀 코드를 이해하고 있다면 무슨 의미인지 쉽게 알 것이다.

 

더보기

해당 오브젝트 풀의 코드는

 

Pool 클래스의 Tag가 풀 딕셔너리의 키 값이고 딕셔너리는 Size 크기 만큼의 큐를 가지고 있다. 

그 큐안에 Size 수의 프리펩들이 들어가 있는 것이다.

 

Pool 객체들을 List 형식으로 들고 있기에 인스팩터 창에서 Pool 객체의 필드(tag, prefab, size)들을 설정해 리스트에 추가한 것

 

재생이 안된다면?

 

만일 코드에도 이상이 없고 재생이 안된다면 콘솔창을 한 번 살펴볼 필요성이 있다.

 

AudioSource 컴포넌트가 없는데 스크립트서 접근하려 해서 에러가 난 것이다.

SoundManager에 AudioSource 컴포넌트를 부착해주면 된다.

 

AudioClip의 경우 인스팩터창에서 넣어줄 수 있게 했지만 AudioSource는 GetComponent를 통해 참조를 하고 있기에 반드시 부착을 해줘야 동작이 된다.