본문 바로가기

C#

[C#] Unity 버튼 컴포넌트에 버튼 클릭 사운드 삽입하기 - 잘하게 되

준비물

- 사운드 파일(AudioSource)

- Hierarchy 창에 존재하는 게임오브젝트(사운드가 필요한 곳)

- 별도의 게임오브젝트

 

 

왜 저것만 빨간색인가요?

왜냐하면 저 요소가 일반적으로 사람들이 실수하는 부분이기 때문이다.

(나도 그랬고, 다들 그런 것 같아 보이고, 타 개발 블로그에서도 그럽니다. ㅜㅜ)

 

 

다른 작업에 비하면 소리 넣는 작업은 대빵 쉬워 보이는데

정작 여기서도 막히는 나 자신을 발견하는 것이란...!

 

 

꼭 버튼 클릭 사운드가 아니어도 된다.

배경음악(bgm)이든 뭐든 좋다.

 

 

사운드 파일(AudioSource)

 

이렇게 본인이 사용하려는 오디오 소스파일을 프로젝트 폴더에 넣는다.

나는 유니티 에셋스토어에서 무료 에셋을 임포트했다.

혹시 임포트하는 방법을 모르는 분이 계신다면 댓글 주세요. 5분 안에 설명해 드립니다.

오디오 믹싱 같은 건 알아서 하고 옵니다.

우리가 필요한 건 사용할 음악 파일 그 자체 뿐...

 

 

Hierarchy 창에 존재하는 게임오브젝트(사운드가 필요한 곳)

 

사운드를 넣고자 하는 게임오브젝트를 클릭한다.

나의 경우, ui 캔버스 상에서 하나의 버튼을 생성하고, 그 버튼을 클릭할 때마다 사운드가 나도록 하고자 했다.

위의 방법으로 Button을 생성할 경우, 오른쪽처럼 자동으로 Button 컴포넌트가 생성된다.

다른 게임오브젝트에도 직접 Button 컴포넌트를 추가할 수 있다.

 

 

Button 컴포넌트에는 On Click() 이벤트가 붙어 있다. 코드로 다루어도 되지만 이렇게 인스펙터 창에서 제공한다.

원래 있던 On Click 이벤트는 무시하고, + 버튼을 눌러 이벤트를 하나 생성한다.

 

 

Button 컴포넌트의 OnClick 이벤트 관리

 

파란 테두리로 표시된 저곳을 클릭해, 프로젝트 폴더 내의 파일이나 Hierarchy 창의 게임오브젝트를 하나 선정한다.

그러면 버튼을 클릭 시, 선정된 것(또는 선정된 것이 가진 함수 중 내가 선택한 함수)이 실행된다.

 

 

당신이 실패한 이유:

파란 테두리 표시된 부분을 클릭하면 이렇게 나와요

 

파란색 테두리로 표시되어 있던 곳을 클릭해서 앞에서 프로젝트 폴더에 둔 사운드파일을 선택할 수 있다.

오른쪽에는 No Function이라고 적혀 있는데, 선택할 수 있는 건 딱히 보이지 않는다.

우리가 알고 있는 mp3파일 등등 사운드파일 자체에는 별도의 함수가 내장되어 있지 않기 때문이다.

 

 

No Fuction. 그냥 오디오파일이기에 함수 존재 x

 

버튼을 클릭할 경우, On Click() 이벤트가 작동된다. 그렇다면 사운드 소스파일을 추가했으니 잘 작동하지 않을까?

정답은 No...

실행해 보면, 고요함이 나를 반긴다.

 

 

이렇게 하면 됩니다:

별도의 게임오브젝트

 

Hierarchy 창에서 별도의 게임오브젝트를 생성한다.

위에 나온 것처럼 Create Empty를 선택하면 된다. (물론 다른 오브젝트도 가능하다.)

나는 그냥 GameObject라는 기본 이름을 사용했지만, 

게임에 필요한 자질구레한 컴포넌트들을 추가해두는 용도이므로

알아보기 쉬운 이름으로 바꾸면 좋을 것 같다.

 

 

이제 이 게임오브젝트를 클릭해, 오른쪽 사진처럼 Audio Source 컴포넌트를 추가한다.

Audio Source 컴포넌트가 보이는 인스펙터 창을 보면, 가장 위에 Audio Clip이 있다.

여기에 아까 위에서 넣은 방식과 동일하게, 사용하고자 하는 사운드파일을 넣는다.

 

 

여기서 주의해야 할 점은,

'Play On Awake'의 체크박스를 눌러 비활성화해야 한다(false).

그렇지 않으면 버튼이 눌리지 않아도 이펙트 사운드가 무한 재생된다.

만약 배경음을 넣고자 한다면, 이 'Play On Awake'와 함께 'Loop'도 활성화하면 좋을 것 같다.

 

 

버튼 클릭 이벤트의 경우, 'Play On Awake'를 비활성화한다.

 

이제 다시 버튼 게임오브젝트로 돌아온다.

아까 위에서 설명한 오디오파일을 넣는 방법에서,

방금 Hierarchy에서 새로 생성한 게임오브젝트를 넣는 방법으로 바꾸면 된다.

현재 Scene의 Hierarchy에 있는 것이므로, Scene 패널을 클릭하면 더 쉽게 찾을 수 있다.

 

 

On Click()의 두 번째 이벤트처럼 게임오브젝트를 넣는다.

 

그러면 이제

사운드파일 자체를 넣었을 때와 비교해 달라지는 점이 있다.

No Function이라고 쓰여 있던 우측 드롭다운 버튼을 클릭하면

아까보다 다양한 메뉴가 등장한다.

 

 

디오니소스

 

이는 방금 넣은 게임오브젝트에 내장된 변수나 함수들로써,

게임오브젝트의 (인스펙터 창에 존재하는) 컴포넌트들의 집합이다.

즉, 내가 해당 게임오브젝트에 컴포넌트로 넣은 사운드파일이나 이외 각종 스크립트에 접근할 수 있다는 말이다.

그중에서 UnityEngine.AudioSource가 있을 것이다.

위 사진에서는 AudioSource가 두 개가 있는데, 그냥 내가 다른 하나를 더 추가해둬서 그렇다. ^^

 

 

Play() 함수가 등장한다.

 

내가 넣은 사운드파일이 바로 UnityEngine.AudioSource이다.

여기에 마우스를 올리면, 사진과 같이

굉장히 그럴싸한 Play() 함수가 보인다.

이를 선택해주면 완성이다.