본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] Animator 를 이용한 애니메이션 속도 조절

by 레오란다 2023. 4. 26.
반응형

이번 글에서는 유니티 Animator 의 파라미터를 이용해 특정 애니메이션의 속도를 조절하는 법에 대해 알아보도록 하겠습니다.

 

특정 캐릭터의 공격 모션을 다음과 같이 만든다고 가정해 봅니다.

  • 공격 시작부터 실제 공격하기전까지의 준비 동작은 느리게 진행
  • 공격 준비 동작이 끝나고 실제 공격은 빠르게 이루어짐

애니메이션을 직접 제작한다면 처음부터 위의 특성을 고려해 만들면 됩니다. 하지만 직접 만든 게 아닌 경우에는 어떻게 해야 할까요? 

 

다행히 유니티는 Animator 에서 파라미터를 지원해주고 이를 애니메이션에 적용할 수 있는 방법을 제공해 줍니다. 지금부터 이것을 활용해서 위에선 언급한 공격 모션의 속도를 조절하는 방법에 대해 알아보도록 하겠습니다.

 

슬라임 애니메이터 설정

이번 글에서도 제가 예제로 많이 사용하는 Monster DUO 무료 에셋에 있는 슬라임 몬스터를 사용하도록 하겠습니다. 에셋스토어에서 에셋을 다운로드 받고 Slime 프리팹을 hierarchy 창에 추가해 객체를 생성합니다.

 

유니티 에디터에서 상단 메뉴의 [Windows > Animation > Animator] 를 클릭하시면 다음과 같은 Animator 창이 나타납니다.

 

Slime's Animator Window
슬라임의 Animator 창 모습

 

보시는 것과 같이 모든 애니메이션이 다 등록되어 있어서 매우 지저분합니다. Attack01 만 빼고 전부 삭제합니다. 그리고 Animator 창의 왼쪽 상단에 있는 Parameters 탭에서 다음과 같이 AttackSpeed 파라미터를 추가해 주세요.

 

AttackSpeed 파라미터 추가
AttackSpeed 파라미터 추가

 

State 설정

Animator 창에 있는 Attack01 은 state 입니다. 이 state 를 한 번만 클릭하면 Inspector 창에 다음과같이 표시됩니다. 한 번만 클릭해야 합니다. 더블 클릭하면 Inspector 창에 다른 정보가 표시됩니다.

 

Animator state 의 Inspector 창
Animator state 의 Inspector 창

 

Inspector 창에 보면 Speed 가 있습니다. 이 값을 수정하면 애니메이션의 속도가 조절됩니다. Speed 밑에 보면 Multiplier 가 있고 그 우측에 Parameter 체크 박스가 있습니다. 이 체크 박스를 체크하면 Animator 창에서 추가한 파라미터를 지정해 줄 수 있습니다. 여기에 AttackSpeed 를 지정하면 됩니다.

 

 

Inspector 창에서 Multiplier 에 파라미터 적용
Inspector 창에서 Multiplier 에 파라미터 적용

 

이렇게 하면 기본 Speed 값에 AttackSpeed 의 값이 곱해져 최종 애니메이션의 속도가 결정됩니다.

 

애니메이션 이벤트 설정

이제 Animator 창에서 Attack01 state 를 더블 클릭합니다. 그러면 이번엔 Inspector 창에 다음과 같은 정보가 나타납니다.

 

State's Inspector 2
State 를 더블 클릭했을 때의 Inspector 창

 

여기서 중요한 것은 붉은 테두리가 있는 Events 와 아래쪽에 있는 붉은 테두리 영역입니다. Events 를 클릭해서 펼쳐줍니다. 그리고 아래쪽 테두리 부분을 클릭하면 다음과 같이 애니메이션 미리보기가 나타납니다.

 

animation event 설정 1
애니메이션 event 설정

 

위 그림의 작은 테두리 부분을 클릭하면 애니메이션에 이벤트를 추가할 수 있습니다. 이 부분을 클릭하고 다음과 같이 Function 에 OnAttackReady 를 입력합니다. 

 

animation event 설정 2
OnAttackReady 이벤트

이제 하단에 있는 애니메이션 미리보기의 슬라이더를 움직여서 아래와 같이 공격 준비가 끝나는 시점으로 이동해 줍니다. 그리고 그 부분에 이벤트 추가 버튼을 클릭해서 새로운 이벤트를 추가하고 이름을 OnAttackBegin 으로 입력합니다.

 

animation event 설정 3
OnAttackBegin 이벤트

 

마지막으로 공격 모션의 끝 부분에 OnAttack 을 추가합니다.

 

animation event 설정 4
OnAttack 이벤트

 

이벤트를 모두 추가하고 꼭 [Apply] 버튼을 클릭해 주셔야 합니다.

 

이렇게 추가한 이벤트는 슬라임 객체에 추가할 Slime 스크립트에서 사용될 것입니다.

 

 

스크립트 추가

Hierarchy 창의 슬라임 객체에 Slime 스크립트를 추가하고 코드를 다음과 같이 작성합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Slime : MonoBehaviour
{
   Animator anim;
   // Start is called before the first frame update
   void Start()
   {
      anim = GetComponent<Animator>();
   } 

   void OnAttackReady()
   {
      anim.SetFloat("AttackSpeed", 0.1f);      
   }

   void OnAttackBegin()
   {
      anim.SetFloat("AttackSpeed", 1.5f);      
   }

   void OnAttack()
   {
      anim.SetFloat("AttackSpeed", 0.5f);      
   }
}

 

위의 코드로 각 이벤트 때 AttackSpeed 값을 조절해 주면 애니메이션의 속도가 의도한 것과 같이 변하게 됩니다.

 

Result
실행 결과

반응형

댓글