[언리얼엔진 메타사운드 기초] 06. 루프 사운드를 만들고 재생시켜보자

728x90

이번 글에서는 블루프린트라는 언리얼의 프로그래밍 기능이 언급될 예정입니다.

그냥 '아~ 이런 기능을 사용하면 되는구나~'하고 넘어가주셔도 무방합니다.

 

언리얼엔진을 통해 게임(메타버스)을 개발하기 위해서는 개발자가 아니더라도 블루프린트를 이용해야하는 경우가 많으니 꼭 한 번쯤이라도 원리를 익혀두는 것이 좋습니다.

루프 사운드 구성 예시
루프 사운드 구성 예시

 

 

사운드큐(Sound Cue)에서는 재생단에 Loop 노드를 만들어 루프가 가능했으나 메타사운드에서는 Loop 노드가 사라졌습니다.

 

대신 Wave Player 내 Loop를 체크하여 루핑을 할 수 있습니다.

 

기본적으로 루프 사운드는 끝 없이 재생됩니다.

여기서 문제가 발생합니다.

 

루프사운드는 그냥 구성할 경우 종료되지 않고 끝없이 재생되며 버그를 야기합니다. (경험자입니다.)

 

버그를 예방하려면 Envelope 기능과 이전에 언급했던 ‘트리거’를 이용하면 됩니다.

 

먼저 Stop 이라는 트리거 하나를 만들고 ADSR Envelope(Float 또는 Audio) 노드를 불러옵니다.

ADSR이 무엇인지에 대해서는 추후 다루겠습니다.

 

다음으로 재생 시 Input 트리거와 Stop 트리거를 각각 ADSR Envelope의 Trigger Attack, Trigger Release 핀에 연결합니다.

 

ADSR Envelope의 Out 방향으로 나있는 On Done 핀은 완료 시라는 OutPut 노드에 연결합니다.

 

이제 Wave Player를 불러옵니다.

 

Wave Player의 Play 핀에 재생 시 트리거를 연결합니다.

플레이할 사운드는 알아서 선택해주시면 됩니다.

 

중간 점검을 하면 다음과 같이 연결되어있으면 됩니다.

 

(필수는 아니며 재생시 노드를 하나만 불러와 여러 노드에 연결해줘도 됩니다.)

ADSR EnvelopeADSR Envelope

 

이제 ADSR Envelope를 무엇으로 불러왔느냐에 따라 이후 진행 방식이 바뀌게 됩니다.

 

먼저 Audio로 불러왔을 때를 다뤄보겠습니다.

 

마우스 우클릭 후 [ * ]를 검색합니다. *는 곱하기 기능으로, Multiply(Audio)를 불러옵니다.

이후 아래 이미지처럼 연결해줍니다.

 

 

다음으로 ADSR Envelope(Float)로 불러왔을 때 입니다.

Mixer를 불러옵니다.

 

이후 아래 이미지처럼 연결해줍니다.

 

 

여기서 궁금증이 생겨야합니다.

 

Play는 사운드를 불러올 때 실행되는 트리거라면

 

Stop은 어떻게 실행하는 걸까요?

정답은 ‘블루프린트’에 있습니다.

 

블루프린트 노드 중에 Execute Trigger Parameter가 있습니다.

 

 

Spawn Sound 기능을 이용하여 소리를 불러온 후 Set을 통해 변수화합니다.

변수화한 사운드를 Execute Trigger Parameter의 Target과 연결하고

In Name에 트리거 이름을 적어주면 됩니다.

 

 

이 기능은 앞으로도 종종 사용하게 될 테니 잘 기억해두시기 바랍니다.

 

이 함수는 Is Valid 기능과 함께 사용하면 좋습니다.

Is Valid는 Input Object에 연결해둔 오브젝트 값이 유효할 때와 유효하지 않을 때를 구분하는 역할입니다.

 

혹시라도 사운드가 정지되어 사라졌는데도 불구하고 Execute Trigger Parameter가 실행되어 연결해둔 사운드를 읽어내려 한다면 오류가 발생합니다.

 

따라서 Is Valid로 오브젝트가 유효할 때만 Execute Trigger Parameter가 실행되도록 세팅하는 게 좋습니다.