공부/인프런 - Rookiss

Part 3-6-3. 애니메이션 : KeyFrame, Event

셩잇님 2023. 8. 22. 16:17
반응형

 

 

Animation(애니메이션)

Animation KeyFrame, 위치 - Window - Animation
모델에 종속된 애니메이션이 아니라 게임에 의존적인 애니메이션 직접 만들기.

 

 

Animation 윈도우에서 애니메이션 클립을 만드려면 반드시 애니메이션을 적용할 오브젝트를 선택한 상태여야 활성화된다. 일종의 애니메이션 클립을 생성하는 과정이다. 애니메이션 컨트롤러의 상태 머신에 추가하고 이를 Animator 컴포넌트에 할당해주면 재생할 수 있다.

첫 번째 줄 👉 시간(프레임)

두 번째 줄 👉 애니메이션 이벤트 (다음 포스트))

세 번째 줄 👉 프레임마다 키를 추가할 수 있음

  • Key : 해당 프레임에서 어떤 속성이 변할 경우 체크되는게 바로 키이다.
  • 두 가지의 속성값만 변화시켜 입력하면, 즉 두 Key 만 입력하면 그 중간 과정은 보정되어 자연스럽게 부드럽게 이어진다. 그 보정의 중간 과정은 아랫 하단의 Curves에서 세밀하게 설정 가능

 

 

녹화 버튼을 사용하면 하나하나 Key 지정할 필요가 없다.

 

이렇게 밑에 Curves를 확인해보면 키와 키 사이에 어떤 과정으로 부드럽게 변화가 되는지 알 수 있다. 이 그래프 커브 모양을 조정해서 보정 과정과 세기 정도를 변화시킬 수 있다.(커브 모양 수정하면 자연스럽게 커브 모양에 맞는 Key들도 추가된다.)


 

Animation Event

 

 

프레임 바로 아랫 줄이 애니메이션 이벤트 줄이다. 이 곳에 우클하거나 혹은 동그라미 친 곳을 통해 애니메이션 이벤트를 추가할 수 있다. 파란색으로 선택된 부분이 현재 선택된 애니메이션 이벤트다.

 

애니메이션의 길이 중에서 어떤 특정 프레임 지점에 이벤트를 생성하면 그 시점에 이벤트를 유니티 전체에 뿌리게 된다.

  • 콜백 형식으로 이 이벤트를 받아 어떤 기능을 처리하게 하면 된다.
  • 애니메이션의 어떤 정확한 타이밍에 이벤트가 뿌려지면 코드에서도 이 이벤트가 호출된다는 것을 알아야 한다.

 

 

예를 들어 특정 시점에 효과음 재생, 공격 애니메이션에서 딱 내리치는 시점에서 데미지 입혀지게 하거나 걷는 애니메이션에서 발자국이 닿을 때만 뚜벅뚜벅 소리 내게 하거나 등등 이런 애니메이션의 특정 지점에서 어떤 기능을 처리하고 싶을 때 애니메이션 이벤트를 사용한다.

 

 

이 애니메이션이 A 라는 오브젝트에 적용되는 애니메이션이라면, A 에 컴포넌트로서 붙어있는 모든 C# 스크립트들의 함수가 이 선택한 애니메이션 이벤트의 Function 목록에 뜨게 된다.

 

    void TestMyFirstAnimationEvent()
    {
        Debug.Log("Event Received 1");
    }

    void TestMySecondAnimationEvent()
    {
        Debug.Log("Event Received 2");
    }

 

 

이렇게 두 가지 함수를 작성했다고 가정하면 이렇게 애니메이션 이벤트의 함수 목록에 두 가지가 생긴 것을 확인할 수 있다. A() 라는 함수를 등록했다면 애니메이션의 이 시점이 재생될 때쯤에는 A 이벤트가 전체에 뿌려지고 이를 받아 A() 함수를 실행하게 한다.

기존에 이미 만들어져있는 모델 애니메이션에도 이벤트를 추가할 수 있다.

 

설정하고자 하는 애니메이션 에셋을 누르고 Animation 탭을 누르면 아래쪽에 Events가 있는데 여기서 애니메이션의 특정 지점에서 이벤트를 뿌릴 수 있다! 예를 들어 위와 같이 저 파란색 지점에서 OnRunEvent 라는 이벤트를 뿌리고 정수 3과 문자열 안녕을 인수로 같이 뿌리게 된다.

 

    void OnRunEvent(int a)
    {
        Debug.Log(a);
    }

    void OnRunEvent(string str)
    {
        Debug.Log(str);
    }

 

위 애니메이션이 적용되는 오브젝트의 C# 스크립트에 이런 함수를 만들어주면 위 OnRunEvent 이벤트를 받을 수 있게 된다. 인수도 받을 수 있다. 첫 번째 함수는 3 인수를 받아 실행될 것이고 두 번째 함수는 안녕 인수를 받아 실행될 것이다.

 

 

반응형