목차
-
강의
![]() | |
이 섹션을 시작하기 전에 먼저 제 4강 스크립트에서 Event 게시하기를 완료해주세요. |
이제 모험가의 발이 바닥에 닿을 때 성공적으로 발소리가 게시되지만 아직은 표면 재질이 달라질 때 발소리가 달라지지 않습니다.

현재 모든 발소리가 똑같이 흙(기본 표면 재질) 발소리를 랜덤으로 사용하고 있는 탓에 모든 발소리가 비슷합니다. Player가 밟고 있는 표면 재질에 맞게 소리를 변화시키면 발소리를 좀 더 자연스럽게 만들 수 있습니다. 제 4강에서는 PostWwiseEvent라는 스크립트를 작성하여 Player_Sprint Animation 클립에서 모험가의 발이 바닥에 닿을 때마다 Event를 게시하도록 했습니다. 이 섹션에서는 스크립트에 몇 가지 기능을 더 추가해서 게임의 다양한 표면을 고려하도록 해봅시다. 표면 재질에 맞는 발소리를 내는 간단한 방법이 있다면, 그것은 바로 각 발소리 Event를 게시하기 전에 표면 재질 유형을 설정해주는 것입니다.
Player_Footstep Event를 게시하면 두 개의 Switch와 Random Container를 통해 Event 호출을 탐색하여 발소리 오디오 파일을 선택하고 재생합니다.

먼저 Footstep_Surface Switch Container를 사용해서 표면 타입을 결정한 다음, Player의 이동 속도에 따라 걷거나 뛰는 발소리 중 어떤 것을 재생할지 결정하도록 하겠습니다. Surface_Type Switch Group은 Footstep_Surface Switch Container에 할당되어 있습니다. 이렇게 Player_Footstep Event가 게시되기 전에 이 Switch를 설정함으로써 Footstep_Surface Switch Container가 알맞은 발소리를 내게 될 것입니다.
다음 단계에서는 Player_Footstep Event를 게시하기 전에 Surface_Type Switch Group을 설정해봅시다.
-
Unity에서 Audiokinetic > Certification > 301 > Lesson 5로 가서 Setting a Switch using a Wwise-Type을 선택하세요.
먼저 PostWwiseEvent 스크립트가 Player 게임 오브젝트에 붙어 있는지 확인해봅시다.
-
Hierarchy에서 Player 게임 오브젝트를 선택하세요.
Player 게임 오브젝트는 Prefab이기 때문에 제 4강 - 애니메이션에서 Event 게시하기에서 Apply를 눌렀을 때 모든 Scene에 있는 Player 게임 오브젝트의 모든 인스턴스에 변경 사항이 적용되었습니다. Inspector를 살펴봅시다. PostWwiseEvent 스크립트가 보이지 않으실 경우 제 4강 - 애니메이션에서 Event 게시하기로 돌아가서 모든 단계를 완료해주세요. 스크립트가 보이신다면 계속해서 진행해주세요.
표면을 감지하지 못하는 문제를 살펴보기 위해서 프로파일러를 통해 게임에 연결해봅시다.
-
Wwise에서 Layouts으로 간 후 Profiler를 선택하세요.
-
Editor에서 WAG 게임을 선택한 후 Remote을 클릭한 다음 Connect를 클릭하세요.
-
Unity에서 Play를 클릭하세요.
같은 Surface_Type Switch Group을 사용하는 Player의 공격이 Capture Log에 기록되지 않도록 아무것도 공격하지 않고 모험가를 움직여보세요.
-
흙에서 잔디로 뛰어간 후 다시 흙으로 돌아와보세요.
-
Exit Play mode하고 Wwise의 Capture Log에서 Display options(눈 아이콘)을 클릭하세요.
Capture Log에 수많은 정보가 표시되어 있습니다. Switch만 남겨두고 나머지를 필터링해서 Switch의 변화를 전반적으로 살펴봅시다.
-
Switch를 제외한 모든 Types을 비활성화하고 탭을 닫습니다.
흙에서 잔디로 뛰어가면 Surface_Type이 잔디로 설정되어야 합니다. 그렇게 해야 Player_Footsteps가 다른 소리를 호출할 수 있습니다. Capture Log에서 특히 Description과 Object Name 열을 살펴보세요.
현재 Surface_Type Switch가 설정되지 않아서 Default Switch 값(흙)이 계속해서 Footstep_Surface Switch Container에서 사용되고 있습니다. Switch를 설정하려면 먼저 Wwise Adventure Game에서 표면 유형 시스템이 작동하는 방식을 이해해야 합니다. 그런 다음 제 4강에서 작성한 PostWwiseEvent 스크립트에서 Event를 게시하기 전에 Switch를 설정해야 합니다.
다음 단계에서는 반드시 Move tool을 선택하시기 바랍니다.
-
Unity Scene 뷰에서 모험가 아래 있는 갈색 Road Space 게임 오브젝트를 선택하세요.
바닥에 선이 보이지 않는다면 Gizmos 탭 아래 씬 뷰에서 'Selection Outline' 상자를 선택해보세요.
-
Inspector에서 특별히 Wwise Adventure Game을 위해 개발된 SoundMaterial 스크립트를 여세요.
SoundMaterial 스크립트는 아주 간단하며 짧지만 정말 유용합니다. 이 스크립트는 'material'이라는 하나의 Wwise-Type 프로퍼티를 담고 있으며 Wwise-Type Switch를 통해 게임 오브젝트를 직접 분류하므로, 발소리나 무기 공격 등이 발생했을 때 이 프로퍼티를 사용하여 어떤 재질과 부딪쳤는지 알려줍니다. WAG에서는 환경 모델을 만든 기획자가 모든 SoundMaterial 스크립트를 알맞은 Switch에 이미 할당해놓았습니다 (이 경우 '흙'). 여러분이 스크립트를 편집하지는 않을 것이지만 PostWwiseEvent 스크립트에서 참조할 Wwise-Type Switch 프로퍼티 드로어가 바로 이 스크립트에 있다는 것을 알아야 합니다.
여러분이 스크립트를 편집하지는 않을 것이지만 PostWwiseEvent 스크립트에서 참조하게 될 material 프로퍼티가 바로 여기에 있다는 것을 알아두세요.
-
Hierarchy에서 Player 게임 오브젝트를 선택하세요.
-
Inspector에서 PostWwiseEvent 스크립트를 여세요.
먼저 PlayFootstepSound() 함수 위에 있는 함수 설명이 더 이상 올바르지 않기 때문에 삭제하겠습니다.
-
// Use this for initialization 이 줄 전체를 삭제하세요.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PostWwiseEvent : MonoBehaviour { public AK.Wwise.Event MyEvent; public void PlayFootstepSound(){ MyEvent.Post(gameObject); } // Update is called once per frame. void Update () { } }
-
'MyEvent.Post(gameObject)' 함수 호출 위에 한 줄 만큼의 공간을 추가하세요.
public AK.Wwise.Event MyEvent; public void PlayFootstepSound(){ MyEvent.Post(gameObject); }
MaterialChecker라는 사용자 정의 스크립트가 Player의 두 '발가락' 게임 오브젝트에 각각 추가되어 Player의 발 밑의 표면(재질)을 감지합니다. 자세한 내용을 이해할 필요는 없지만 이 스크립트는 Player의 왼/오른발이 밟은 표면 게임 오브젝트를 찾아서 이 오브젝트에 붙은 SoundMaterial을 확인한 후 material 프로퍼티의 Switch 값을 알아냅니다.
하지만 MaterialChecker 스크립트는 어떻게 찾을 수 있을까요? Player의 상태와 관련된 게임 오브젝트 등을 쉽게 관리하기 위해 특별히 PlayerManager 스크립트가 제작되었습니다. 이 스크립트에서 Player의 두 발을 찾을 수 있습니다. 먼저 MaterialChecker의 GetMaterial() 함수를 입력해봅시다.
-
MyEvent.Post(gameobject); 줄 위의 빈 공간에 PlayerManager.foot_L.GetMaterial()을 입력하세요.
public void PlayFootstepSound(){ PlayerManager.foot_L.GetMaterial() MyEvent.Post(gameObject); }
이제 Player의 각 발 (foot_R과 foot_L) 밑을 살펴서 SoundMaterial의 현재 Switch 값을 반환하는 GetMaterial() 함수를 입력했습니다. 이제 .SetValue() 함수를 사용하여 Event가 게시되기 전에 Switch를 정의하면 됩니다.
마찬가지로 State도 .SetValue() 함수를 사용하여 Switch와 비슷한 방법으로 설정할 수 있습니다. State에 대해서는 제 8강에서 자세히 배우게 될 것입니다.
-
PlayerManager.foot_L.GetMaterial() 뒤에 .SetValue();를 입력하세요.
public void PlayFootstepSound(){ PlayerManager.foot_L.GetMaterial().SetValue(); MyEvent.Post(gameObject); }
SetValue 괄호 안에 게임 오브젝트를 지정하지 않았기 때문에 SetValue() 함수가 빨간색으로 밑줄 표시되어 있는 것이 보이실 것입니다. 전역적 범위로 작동하는 State와 반대로 (전체 게임을 통틀어 그 State는 단 하나만 존재해야 함) Switch는 게임 오브젝트 범위로 작동합니다. 그렇기 때문에 Switch를 변경하면 같은 게임 오브젝트에 게시된 Event에만 적용되죠. 현재 씬에서 PostWwiseEvent는 Player 게임 오브젝트에 연결되어 있습니다. 그렇기 때문에 Player_Footstep Event에 새로운 Switch를 설정할 경우 Player_Footstep Event가 게시되는 동일한 게임 오브젝트를 참조해야 합니다.
Unity에서는 'gameObject'를 입력하여 스크립트가 추가된 게임 오브젝트를 가져올 수 있습니다.
-
SetValue() 매개 변수(parameter)의 괄호 안에 gameObject를 입력하세요.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PostWwiseEvent : MonoBehaviour { public AK.Wwise.Event MyEvent; public void PlayFootstepSound(){ PlayerManager.foot_L.GetMaterial().SetValue(gameObject); MyEvent.Post(gameObject); } // Update is called once per frame. void Update () { } }
요약해봅시다. Player_Sprint Animation Clip은 PlayFootstepSound() 함수에 연결된 Animation Event를 트리거합니다. 이 함수는 두 가지 목적을 가지고 있습니다. 이 함수는 PlayerManager를 통해 참조되는 CheckMaterial의 GetMaterial() 함수를 사용하여 Player 발 밑의 표면을 알아냅니다. material 프로퍼티는 Wwise-Type Switch이기 때문에 .SetValue() 함수를 사용하여 Player 게임 오브젝트에 Switch(왼발이 밟고 있는 표면)를 설정할 수 있습니다. Player가 이제 알맞은 Switch로 설정되었기 때문에 동일한 게임 오브젝트에 Player_Footstep Event를 게시할 수 있습니다. 다시 말하지만 스크립트를 Unity에서 적용시키기 위해서는 변화된 스크립트를 항상 저장해야 합니다.
-
Windows의 경우 CTRL+S, Mac의 경우 CMD+S를 눌러서 스크립트를 저장하세요.
그 다음, 테스트 과정을 반복하세요.
-
Unity에 Remote Connect한 후 씬을 Play하면서 여러 표면 위로 뛰어다녀보세요.
-
Play 모드를 종료한 후 Wwise에서 Capture Log의 Description과 Wwise Object 열을 확인해보세요. Dirt와 Grass Switch가 모두 설정된 것이 보이실 것입니다.
이렇게 Wwise-Type Switch를 사용하여 게임의 표면을 분류함으로써 Player가 밟고 있는 표면에 따라 발소리를 동적으로 변경할 수 있게 되었습니다. 이와 같이 시스템을 구성하고 나서 추가로 지역을 제작할 때에는 표면에 소리에 맞는 이름을 붙이기만 하면 됩니다.
![]() | |
현재 단계에서는 왼발 밑의 SoundMaterial을 확인하는 방법만 보여주지만 양발을 번갈아 확인하도록 하는 것이 이상적이겠죠. 이런 시스템을 구성하는 법을 배우려면 AdventuressAnimationEventHandler 스크립트의 TakeFootstep() 함수를 살펴보세요. |