5 개의 강의

목차

Wwise-Type을 사용하여 Switch 설정하기

[참고]

이 섹션을 시작하기 전에 먼저 제 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을 설정해봅시다.

  1. Unity에서 Audiokinetic > Certification > 301 > Lesson 5로 가서 Setting a Switch using a Wwise-Type을 선택하세요.

    먼저 PostWwiseEvent 스크립트가 Player 게임 오브젝트에 붙어 있는지 확인해봅시다.

  2. Hierarchy에서 Player 게임 오브젝트를 선택하세요.

    Player 게임 오브젝트는 Prefab이기 때문에 제 4강 - 애니메이션에서 Event 게시하기에서 Apply를 눌렀을 때 모든 Scene에 있는 Player 게임 오브젝트의 모든 인스턴스에 변경 사항이 적용되었습니다. Inspector를 살펴봅시다. PostWwiseEvent 스크립트가 보이지 않으실 경우 제 4강 - 애니메이션에서 Event 게시하기로 돌아가서 모든 단계를 완료해주세요. 스크립트가 보이신다면 계속해서 진행해주세요.

    표면을 감지하지 못하는 문제를 살펴보기 위해서 프로파일러를 통해 게임에 연결해봅시다.

  3. Wwise에서 Layouts으로 간 후 Profiler를 선택하세요.

  4. Editor에서 WAG 게임을 선택한 상태로 Remote...를 클릭한 후 Connect를 클릭하세요.

  5. Unity에서 Play를 클릭하세요.

    같은 Surface_Type Switch Group을 사용하는 Player의 공격이 Capture Log에 기록되지 않도록 아무것도 공격하지 않고 모험가를 움직여보세요.

  6. 흙에서 잔디로 뛰어간 후 다시 흙으로 돌아와보세요.

  7. Play 모드를 종료하고 Wwise의 Capture Log에서 Filter... 버튼을 클릭하세요.

    Capture Log에 수많은 정보가 표시되어 있습니다. Switch만 남겨두고 나머지를 필터링해서 Switch의 변화를 전반적으로 살펴봅시다.

  8. Switch를 제외한 모든 Type을 비활성화한 후 OK를 클릭하세요.

    흙에서 잔디로 뛰어가면 Surface_Type이 잔디로 설정되어야 합니다. 그렇게 해야 Player_Footsteps가 다른 소리를 호출할 수 있습니다. Capture Log에서 특히 Description과 Wwise Object 열을 확인해보세요.

    현재 Surface_Type Switch가 설정되지 않아서 Default Switch 값(흙)이 계속해서 Footstep_Surface Switch Container에서 사용되고 있습니다. Switch를 설정하려면 먼저 Wwise Adventure Game에서 표면 유형 시스템이 작동하는 방식을 이해해야 합니다. 그런 다음 제 4강에서 작성한 PostWwiseEvent 스크립트에서 Event를 게시하기 전에 Switch를 설정해야 합니다.

    다음 단계에서는 반드시 Move tool을 선택하시기 바랍니다.

  9. Unity Scene 뷰에서 모험가 아래 있는 갈색 Road Space 게임 오브젝트를 선택하세요.

    바닥에 선이 보이지 않는다면 Gizmos 탭 아래 씬 뷰에서 'Selection Outline' 상자를 선택해보세요.

  10. Inspector에서 특별히 Wwise Adventure Game을 위해 개발된 SoundMaterial 스크립트를 여세요.

    SoundMaterial 스크립트는 아주 간단하며 짧지만 정말 유용합니다. 이 스크립트는 'material'이라는 하나의 Wwise-Type 프로퍼티를 담고 있으며 Wwise-Type Switch를 통해 게임 오브젝트를 직접 분류하므로, 발소리나 무기 공격 등이 발생했을 때 이 프로퍼티를 사용하여 어떤 재질과 부딪쳤는지 알려줍니다. WAG에서는 환경 모델을 만든 기획자가 모든 SoundMaterial 스크립트를 알맞은 Switch에 이미 할당해놓았습니다 (이 경우 '흙'). 여러분이 스크립트를 편집하지는 않을 것이지만 PostWwiseEvent 스크립트에서 참조할 Wwise-Type Switch 프로퍼티 드로어가 바로 이 스크립트에 있다는 것을 알아야 합니다.

    여러분이 스크립트를 편집하지는 않을 것이지만 PostWwiseEvent 스크립트에서 참조하게 될 material 프로퍼티가 바로 여기에 있다는 것을 알아두세요.

  11. Hierarchy에서 Player 게임 오브젝트를 선택하세요.

  12. Inspector에서 PostWwiseEvent 스크립트를 여세요.

    먼저 PlayFootstepSound() 함수 위에 있는 함수 설명이 더 이상 올바르지 않기 때문에 삭제하겠습니다.

  13. // 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 () {
        
        }
    }

  14. '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() 함수를 입력해봅시다.

  15. 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강에서 자세히 배우게 될 것입니다.

  16. 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'를 입력하여 스크립트가 추가된 게임 오브젝트를 가져올 수 있습니다.

  17. 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에서 적용시키기 위해서는 변화된 스크립트를 항상 저장해야 합니다.

  18. Windows의 경우 CTRL+S, Mac의 경우 CMD+S를 눌러서 스크립트를 저장하세요.

    그 다음, 테스트 과정을 반복하세요.

  19. Unity에 Remote Connect한 후 씬을 Play하면서 여러 표면 위로 뛰어다녀보세요.

  20. Play 모드를 종료한 후 Wwise에서 Capture Log의 DescriptionWwise Object 열을 확인해보세요. Dirt와 Grass Switch가 모두 설정된 것이 보이실 것입니다.

이렇게 Wwise-Type Switch를 사용하여 게임의 표면을 분류함으로써 Player가 밟고 있는 표면에 따라 발소리를 동적으로 변경할 수 있게 되었습니다. 이와 같이 시스템을 구성하고 나서 추가로 지역을 제작할 때에는 표면에 소리에 맞는 이름을 붙이기만 하면 됩니다.

[작은 정보]

현재 단계에서는 왼발 밑의 SoundMaterial을 확인하는 방법만 보여주지만 양발을 번갈아 확인하도록 하는 것이 이상적이겠죠. 이런 시스템을 구성하는 법을 배우려면 AdventuressAnimationEventHandler 스크립트의 TakeFootstep() 함수를 살펴보세요.