음향/Wwise

101-03-1. Game Sync 이해하기 (표면에 따라 발소리 변경하기)

펭더 2022. 4. 5. 19:43

이 글은 AudiKineic의 교육자료를 참고해서 작성했다.


03. Game Sync 이해하기

이전 강의에서 배웠듯 Game call은 게임엔진과 Wwise 오디오 엔진이 주고받는 메시지와 같다.

지금까지는 위자드가 얼음 보석을 쏘는 것과 같이 단순한 Event Game call을 사용해서 작업했다.

하지만 Event Game Call과 같이 단순한 GameCall 뿐만 아니라 보다 복잡한 정보를 토대로 사운드가 변해야 하는 경우가 있다. 

예를 들어, 플레이어가 걷고 있는 표면의 재질 / 플레이어 생명력 / 플레이어의 생존 유무,,, 등이다. 

Wwise에서는 다양한 오브젝트를 만들수있으며, 이러한 오브젝트를 사용하여 게임이 보내주는 다양한 정보를 수신할 수 있다. 

 

위에서 언급한 '복잡한 정보'는 Game Sync 라는 범주에 속하는 몇 가지 유형의 오브젝트를 통해 실현된다. 

3강에서는 Game Sync의 유형중 세가지 유형을 알아본다.


Switch 사용하기. 

Switch를 사용하는 경우의 대표적인 예는 발소리이다. 

바닥의 재질에 따라 발소리가 달라져야하는데, 플레이어가 이동을 시작할 때 Game Call을 전송하고 이동을 정지할 때 다시 한번 Game Call을 전송하는 방법이 있다. 

예제로 사용하는 Cube의 경우 각 발의 움직임이 Event로 전송된다. 

발소리 Event가 발생될때 발소리를 재생하면 된다. 

하지만 고려해야할 점은 바닥의 재질이다. 재질에 따라 발소리가 바뀌어야 한다. 

플레이어가 걷고있는 표면의 변화를 반영하기 위해서 Wwise에서는 특정 매개 변수 (Parameter)를 만들어 매개 변수 안의 옵션을 정의한 후 이정보를 사용하여 사운드를 변경시킬 수 있다. 


Switch Group만들기. 

발자국 소리를 구현하기 위해서는 Switch Group 오브젝트가 필요하다. 

Event오브젝트와 마찬가지로 Switch Grop 오브젝트는 게임엔진에서 전송하는 정보를 수신하기 위해 필요하다. 

 Project Explorer 안의 Game Syncs 탭 

Wwise가 수신할 수 있는 특정 유형의 Game Sync를 표시하는 여러 개의 폴더를 볼 수 있다. 

각 폴더는 다른 유형의 Game Sync를 만들 수 있는 기능을 제공한다. 

각 유형의 Game Sync는 게임 플레이에서 발생되는 조건 기반 시나리오와 통신하는 고유의 기능을 가진다. 

플레이어가 걷고있는 표면을 정의하려면 Switch를 사용하는 것이 가장 적합하다. 

Switches 폴더 - Default Work unit을 선택 - Switch Group 생성 - Switch grop의 이름 지정

위 과정을 거쳐 생성되는 Switch Group의 이름은 반드시 프로그래머와 동일한 이름을 사용해야 한다. 

3강의 예제에서는 Switch Group의 이름을 'Material'로 설정한다. 

이 예제에서는 Material 스위치 그룹을 사용하여 발소리 뿐만 아니라 보석이 바닥에 떨어지는 소리 또한 변경한다. 


Switch Group에서 옵션 정의하기. 

Switch Group을 생성하였다면, 이 그룹안에 Switch를 만들어야 한다. 

Cube의 경우 플레이어가 게임 플레이 도중 걸을 수 있는 모든 표면을 파악하고 이에 맞는 Switch를 생성해야 한다. 

Switch의 이름 역시 프로그래머와 동일한 이름으로 설정해야한다. 

Switch Group 오브젝트 선택 - 새로운 Switch 생성 - Switch 오브젝트의 이름 지정

위와 같은 방법으로 Switch Group 안에 Switch 오브젝트를 설정할 수 있다.


Switch Container 만들기. 

위에서 Switch Group을 생성해서 게임이 보내는 GameCall을 수신할 수 있게 되었고, 

이를 수신했을 때 알맞게 대응하기 위해 Switch를 생성하였다. 

이러한 조건이 실행되었을 때 알맞은 소리를 재생하기 위해서는 Switch Container 오브젝트를 통해 실현된다.

Project Explorer의 Audio 탭 - Actor Mixer Hierarchy안의 Default Work Unit - Switch에 대응하여 재생될 wav가 담긴 폴더를 Import - Audio File Importer 창이 열림 - 각 폴더를 Virtual Folder로 설정된 것을 확인.

우리는 Virtual Folder가 필요한 것이 아니라 Switch에 대응하기 위해 폴더를 만들고 있다. 

그렇기 때문에 Virtual Folder를 Switch Container로 변경해야 하고, 

해당 폴더 하위에 있는 폴더는 Random Contatiner로 변경해야 한다.


Switch와 Switch Container 연결하기. 

개발 과정에서 수많은 Switch Group이 생겨도, 하나의 Switch Group에는 하나의 Switch Container만 연결할 수 있다. 

Switch Group을 Switch Container에 연결하는 작업은 Switch Container의 Property Editor에서 이뤄진다. 

Switch Container선택 - Property Editor의 Grop 탭 - [>>]선택 버튼을 클릭 - Switch Groups - Material 선택

위 과정을 거쳐 Switch Container가 Game Call을 인식하게 되었다. 

모종의 이유로 게임이 필요한 정보를 오디오 엔진에 전달하지 않는 경우가 있는데, 

이때 사용할 기본 설정을 정의해야 한다. 

Default Switch/State의 [>>] 선택 버튼 클릭 - 원하는 기본 설정을 선택

화면 하단의 Contetns Editor에서 앞서 생성해놓은 Random Container를 알맞은 Switch에 연결할 수 있다. 

Contetns Editor 좌측의 Random Container를
우측 Assigned Objects 영역에 표시된 알맞은 Switch로 드래그

위 과정을 통해 Switch에 대응하는 Random Container를 연결시켜 놓을 수 있다.


Switch Container를 통해 표면 시뮬레이션하기. 

Switch는 플레이어 캐릭터가 걷고 있는 표면만을 표시하며 걸었음을 의미하지 않는다. 

플레이어가 '걸었음'을 전달하려면 이때 발생되는 발자국 정보를 수신할 Event를 만들어야 한다. 

1. Project Explorer의 Events 탭 - Work Unit선택 - 새로운 Event생성 - Event의 이름 지정
2. Project Explorer의 Audio 탭 - Switch Container 오브젝트를 Event Editor의 Action 목록으로 드래그

위 과정을 거치고 나면

해당 Event를 재생하면 Switch Container에 포함된 사운드 중 하나가 재생된다. 

특별한 정보가 없을 때 재생할 기본값을 설정해놓았다면 그 설정에 따라 소리가 재생된다. 

다른 표면으로 변경되었을 때 알맞게 작동하는지 보려면

Transport Control 뷰 - Switches 클릭 - Event와 연결된 모든 Switch Container가 우측에 나타남. - 이곳에서 특정 Switch를 선택.

위 과정을 통해서 설정한 값에 따라 소리가 변하는 것을 들어 볼 수 있다. 

Switch를 포함한 Game Sync를 기본값으로 초기화하려면, 

Transport Control에서 Reset All 클릭.