4 개의 강의

목차

애니메이션에서 Event 게시하기

[참고]

이 섹션을 시작하기 전에 이전 섹션인 Wwise-Type을 사용하여 Event 게시하기를 반드시 완료해주세요.

Unity에서는 Animation 클립을 사용하여 애니메이션 작업을 처리할 수 있습니다. 애니메이션 클립에는 Maya나 3Ds Max와 같은 외부 프로그램에서 만든 애니메이션이나 Unity의 오브젝트 수정 사항을 담을 수 있습니다. 모험가가 어떻게 만들어졌는지 살펴봅시다.

이 캐릭터의 모델은 Maya에서 만들어졌으며 캐릭터가 Move(이동)하고, Attack(공격)할 수 있도록 여러 스크립트가 캐릭터 게임 오브젝트에 붙어 있습니다. 하지만 이 캐릭터에 생기를 주려면 적을 공격할 때 캐릭터의 팔이 휘둘러져야 하고 앞으로 이동 버튼을 누르면 다리가 앞으로 나가야겠죠.

그렇다면 소리는 어떨까요? Wwise에서 찾아보면 고음질의 발소리가 Random Container에 담겨있음을 알 수 있습니다. 하지만 어떻게 하면 정확히 모험가의 발이 바닥에 닿는 시점에 소리를 재생할 수 있을까요? 그러기 위해서는 Animation Event가 필요합니다. 이 이벤트는 애니메이션의 특정 시점을 스크립트의 함수에 연결할 수 있게 해주는 Unity 기능입니다. 먼저 Animation에서 특정 시점을 선택한 후 스크립트에서 함수를 지정합니다. 그리고 이 스크립트에서 Event를 게시할 수 있습니다. 다음 단계에서는 이전에 만든 PostWwiseEvent가 플레이어의 발소리를 게시하도록 변경한 후 Start 함수가 Animation Event로부터 호출되도록 변경해봅시다. 그런 다음 Animation Editor를 살펴보고 Animation Event에서 새로운 함수를 직접 호출해봅시다.

  1. Unity에서 Audiokinetic > Certification > 301 > Lesson 4로 가서 Posting Events from Animations를 선택하세요.

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

    Player 게임 오브젝트에 PostWwiseEvent 스크립트를 추가합시다. 이 스크립트는 이전 섹션에서 여러분이 작성한 스크립트이며 제 5강에서도 사용할 것입니다.

  3. Inspector에서 Add Component를 클릭하고 PostWwiseEvent를 선택하세요.

    프로젝트에 이 스크립트가 보이지 않으실 경우 이전 섹션인 Wwise-Type Event 프로퍼티 만들기로 돌아가셔야 합니다.

  4. MyEvent 프로퍼티 드로어를 클릭하고 Player_Footstep Event를 선택하세요.

  5. PostWwiseEvent를 더블 클릭해서 스크립트를 여세요.

    Visual Studio (혹은 여러분이 사용하는 기본 코드 편집기)가 열립니다. 여기에서 이전에 만든 PostWwiseEvent 스크립트를 확인할 수 있습니다. 재생 모드를 시작하면 이 스크립트에서 MyEvent.Post() 함수가 MyEvent 프로퍼티에서 선택한 Event를 호출합니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event MyEvent;
        // Use this for initialization.
        void Start () {
            MyEvent.Post(gameObject);
        }
        
        // Update is called once per frame.
        void Update () {
        
        }
    }

    현재 MyEvent.Post() 함수 호출이 Start() 함수 안에 있기 때문에 MyEvent 프로퍼티에서 선택한 Event는 게임이 시작될 때 게시됩니다. 하지만 저희는 Animation Event에서 이 함수를 호출하고자 하기 때문에 게임이 실행될 때 Unity가 함수를 자동으로 호출하지 않도록 함수에 따로 맞춤 이름을 지정해주겠습니다.

    [참고]

    함수의 이름은 이 단계에서는 중요하지만 Unity에서 Animation Event를 사용할 때는 중요하지 않습니다. 원하실 경우 'PostFootstepEvent'와 같이 다른 함수 이름을 사용하셔도 됩니다. 하지만 함수의 이름이 Unity API에서 사용한 함수와 동일할 경우, 다른 처리 과정에서도 이 함수가 호출될 수 있습니다.

  6. StartPlayFootstepSound로 교체하세요.

    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event MyEvent;
        // Use this for initialization.
        void PlayFootstepSound() {
            MyEvent.Post(gameObject);
        }

    이전에는 Play 모드를 시작하면 스크립트의 Start() 함수가 호출되었지만 이제 함수의 이름이 변경되었기 때문에 Unity는 Scene이 로드될 때 그 함수의 내용을 더 이상 자동으로 호출하지 않습니다. Animation Event로 돌아가기에 앞서, 먼저 함수 선언 앞에 public 접근 한정자를 추가해서 Unity가 새로운 이름의 함수를 인식할 수 있도록 해주겠습니다.

  7. void PlayFootstepSound() 앞에 public을 입력하세요.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
        
    public class PostWwiseEvent : MonoBehaviour {
        public AK.Wwise.Event MyEvent;
        // Use this for initialization.
        public void PlayFootstepSound() {
            MyEvent.Post(gameObject);
        }
    }

    PlayFootstepSound() 함수를 퍼블릭으로 만들어 스크립트를 완성했습니다.

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

    이제 Unity로 돌아가서 Animation Event를 만들어봅시다. Animation Event를 Player에 추가해야 하므로 먼저 Player 게임 오브젝트를 선택하세요.

  9. Hierarchy에서 Player 게임 오브젝트가 선택되었는지 확인하세요.

    Animation Event를 추가하려면 Animation Window를 열어야 합니다.

  10. Unity 메뉴에서 Window로 간 후 Animation을 선택하세요.

    애니메이션 설정을 변경할 수 있는 Animation Window이 나타납니다. 만약 이 창을 처음 여실 경우 별도의 창으로 열릴 수 있습니다. 자세히 살펴보기 전에 창을 나머지 Layout 안에 맞게 넣어봅시다.

  11. Animation 창의 탭을 드래그하여 Unity Project 뷰의 오른쪽으로 옮기세요.

    Hierarchy에서 Player 게임 오브젝트를 선택하면 Animation Window가 이제 Player_Idle_wHammer Animation Clip을 보여줍니다.

    Animation 클립이란 프로퍼티의 변화를 하나의 시퀀스로써 저장하는 방법입니다. 모든 프로퍼티는 왼쪽 창에 열거되어 있습니다. 오른쪽에는 프로퍼티가 변경된 시점이 표시되어 있습니다. 이 점들은 키프레임이라고 불립니다. 키프레임 위와 Timeline (시간을 표시하는 가장 윗쪽 바) 아래에는 Animation Event를 추가할 수 있는 Event 줄이 있습니다. 흰색 Time Cursor가 Animation Event에 도달하면 지정된 함수를 호출하기 때문에 Animation 클립에서 특정 시점에 동작이 호출되는지 확인할 수 있습니다. 이제 Player의 발이 바닥에 닿을 때 PlayFootstepSound() 함수를 호출해야 합니다. Player_Sprint Animation 클립을 예로 들어 설명하겠습니다.

  12. Player가 사용하는 모든 Animation 클립을 보려면 왼쪽 위에 있는 목록 메뉴를 여세요.

    여기에 Player의 애니메이션 시스템이 사용하는 모든 Animation 클립이 보이실 것입니다. 이 클립들은 Animator 컴포넌트가 관리합니다.

  13. 왼쪽 위의 목록에서 Player_Sprint를 선택하세요.

    왼쪽에는 애니메이션 안에 어떤 컴포넌트가 있고, 오른쪽에는 Timeline과 아래 Event 줄을 확인하실 수 있습니다.

    Timeline의 가장 왼쪽에는 흰색 Timeline Cursor가 위에서 아래로 그려져있습니다. 이 줄은 Animation의 현재 시점을 표시합니다. Timeline에서 드래그나 클릭을 하여 위치를 변경하면 Scene 뷰에서 애니메이션 클립의 해당 시점에 따라 모험가의 애니메이션이 조정됩니다.

    모험가가 Player_Sprint Animation 클립으로 설정된 것이 보입니다. Time Cursor를 옆으로 드래그하면 모험가가 왼발과 오른발을 바닥에 차례로 내딛으면서 걷는 것을 볼 수 있습니다.

  14. Timeline에서 Timeline Cursor를 앞뒤로 드래그해보세요.

    뷰에 기호나 텍스트가 지저분하게 표시되어 있을 경우 Scene view's Gizmos 탭에서 대부분을 제거할 수 있습니다.

  15. Scene 뷰에서 Gizmos 탭으로 가서 3D Icons를 비활성화하세요.

    다음으로 애니메이션에서 사운드를 시작하고자 하는 정확한 위치를 찾아봅시다.

  16. Timeline Cursor를 모험가의 오른발이 바닥에 닫는 시점(0:05)으로 옮기세요.

    여기에 Animation Event를 추가한 다음 PlayFootstepSound() 함수를 지정해봅시다.

  17. Event 줄에 있는 Time Cursor(0:05)를 우클릭하고 Add Animation Event를 선택하세요.

    새로운 Animation Event 마커가 Event 줄에 표시됩니다.

    타이밍이 정확해야 하므로 Animation Event 마커가 정확히 0:05에 있는지 확인하세요. 그렇지 않으면 Scene 뷰에서 보이는 것과 일치하지 않을 수 있습니다. 다음으로 Inspector를 살펴봅시다.

    여기에서 타임라인의 해당 시점에 호출할 함수를 추가할 수 있습니다. 그렇게 할 수 있는 이유는 이 섹션 앞부분에서 퍼블릭 접근 한정자를 추가했기 때문입니다.

    [작은 정보]

    Animation Event는 Animator 컴포넌트와 동일한 게임 오브젝트에 존재하는 함수에만 연결될 수 있습니다. 다른 게임 오브젝트에 있는 스크립트를 연결하려면 함수 호출을 전달하는 스크립트를 추가로 작성해야 합니다.

  18. Function 프로퍼티 드로어를 클릭해서 PlayFootstepSound() 함수를 선택하세요.

    이제 함수가 Animation Event Marker에 연결되었으니 사운드를 시험할 준비가 되었습니다.

    [작은 정보]

    Function 목록은 여러 정보를 종합적으로 표시하지만 함수 이름의 첫 글자를 입력하면 해당 함수로 건너뛸 수 있습니다. 이 경우 'P'가 되겠죠.

  19. 제 1강에서 설명한대로 Play 모드를 시작하세요. 그런 다음 Shift를 누른 상태에서 W를 눌러서 빠르게 뛰어보세요.

    이렇게 오른발 소리가 추가되었습니다. 이제 왼발 소리를 추가해봅시다. Play 모드를 종료하고 Animation 창으로 돌아가세요.

  20. 왼발이 바닥에 닿는 부분 (0:15)으로 Time Cursor를 드래그하세요.

  21. Event 줄 안을 우클릭하고 Add Animation Event를 선택하세요.

    [작은 정보]

    혹은 Event 줄 왼쪽에 있는 Add Event 버튼을 클릭해서 Animation Event를 추가할 수도 있습니다. 그러면 Timeline Cursor의 위치에 Animation Event가 추가됩니다.

  22. Inspector에서 PlayFootstepSound() 함수를 선택하세요.

  23. Play를 클릭한 후 씬 주위를 빠르게 뛰어보세요.

    Training Area 주변을 뛰어 다니면서 발소리를 들어보세요. 발소리가 Player의 애니메이션을 따라 매끄럽게 들립니다. 사운드를 애니메이션에 직접 연결하면 Player가 알맞은 애니메이션을 실행할 경우에만 Footsteps가 재생되도록 할 수 있습니다. 이 실습 과정을 그대로 따라하시면 걷기 애니메이션, 공격 애니메이션 등 다양한 애니메이션에 발소리를 추가하실 수 있습니다.

    자, 제 5강에서도 사용할 수 있도록 Player Prefab의 변경 사항을 저장해봅시다.

  24. ESC를 눌러 WAG 메뉴를 연 후 Play를 다시 클릭해서 Play 모드를 종료하세요.

  25. Player 게임 오브젝트를 선택한 상태에서 Inspector에서 Apply를 클릭하세요.

    이제 프로젝트에 있는 모든 Player 게임 오브젝트의 발소리가 똑같이 이 애니메이션의 작동 방식을 따를 것입니다.