유니티 애니메이션 속도 조절 방법
게임을 제작할 때 개발자는 애니메이션의 속도에 관여해야하는 경우가 자주 발생한다. 대표적인 예시를 들자면 캐릭터의 공격 속도 수치가 변할 수 있는 게임에서 캐릭터의 공격 속도와 공격 애니메이션의 속도를 맞추기 위해 관여하는 것이다. 이러한 두 속도를 세심하게 맞추는데 실패한다면 캐릭터의 공격 애니메이션이 끝나지 않았는데 캐릭터가 이동을 한다던지, 공격 애니메이션과 데미지가 들어가는 타이밍이 다르다던지 하는 상당히 부자연스러운 상황이 발생하게 될 것이다. 이러한 상황은 게임의 타격감이라는 요소를 떨어뜨리는 심각한 문제가 될 수도 있다.
그렇게 때문에 적절한 순간에 애니메이션의 속도를 조절하는 방법을 알아둘 필요가 있다. 유니티에서는 애니메이션의 속도를 조절하는 방법을 여러가지 지원하는데 하나씩 알아보도록 하자.
방법 1 : Animator에서 선택한 State의 Speed를 Inspector 창에서 애니메이션 속도 직접 변경하기
위의 그림에서 표시된 Speed 값을 직접 변경하는 것으로 애니메이션의 속도를 변경할 수 있다. 하지만 이 방법은 게임 내에서 애니메이션의 속도가 동적으로 변경되지 않을 것이라는 보장이 있을 때에만 사용이 가능하다.
방법 2 : Animator를 소유한 스크립트에서 코드를 통해 애니메이션 속도 변경하기
다음은 스크립트에서 코드로 애니메이션의 속도를 변경하는 예제이다.
using UnityEngine;
public class AnimationSpeedExample : MonoBehaviour
{
public float animSpeed = 1.0f;
public Animator animator;
// Update is called once per frame
void Update ()
{
animator.speed = animSpeed;
}
}
위의 코드를 이용하면 animSpeed라는 변수의 값이 변경될 때마다 Animator 내에 있는 애니메이션들의 속도가 자동으로 변하게 될 것이다. 이 방법은 자유롭게 게임이 실행되는 와중에 애니메이션의 속도를 변경할 수 있지만, animator.speed를 통해서 애니메이션의 속도를 조절하면 해당 animator에 속하는 모든 애니메이션의 속도가 변한다는 단점이 있다. 예를 들자면, 공격 모션의 속도를 빠르게 하기 위해 speed를 1에서 2로 바꾸었는데, 공격 모션 뿐만 아니라, 이동 모션, 대기 모션 등 모든 모션의 속도가 2배 빨라지는 현상이 나타날 수 있다는 것이다. 그렇기 때문에 이 방법은 애니메이션이 블랜드되는 상황에서는 사용하기 부적합하며, 속도를 빠르게 한 애니메이션의 출력이 끝난 이후에는 다음 애니메이션의 정상적인 출력을 위해서 속도 값은 원상복귀시켜 주어야 한다는 단점이 존재한다.
방법 3 : Animator의 Parameter와 Multiplier를 이용한 애니메이션 속도 변경하기
공격 속도가 증가했는데 공격 애니메이션 이외의 애니메이션의 속도가 빨라지는 것은 부적절하며, 뛰어가면서 총을 쏜다던가 하는 방법의 애니메이션 블랜드에서는 모든 애니메이션의 속도가 변경되면 좋지 않다는 것을 앞선 방법에서 이야기했다. 그렇다면 우리가 알아야 할 방법은 속도의 변경이 필요하지 않은 애니메이션은 놔두고, 필요한 몇몇의 애니메이션의 속도만 조절하는 것이다.
이 방법을 위해서 필요한 것은 Animator의 Parameter와 Multiplier라는 것이다.
Animator의 parameter
Animator에서 State를 선택했을 때, Inspector 창에서 찾을 수 있는 Multiplier
이 방법을 적용하는 순서는 다음과 같다.
1. Animator의 Parameter에서 +를 눌러서 float형의 "AttackSpeed"라는 parameter를 만들어 준다.
2. 속도를 조절하고자 하는 State를 선택하고 Multiplier의 Parameter를 체크하고 추가한 AttackSpeed를 선택한다.
3. 속도 변경을 위해 animator의 "AttackSpeed" parameter를 변경하는 코드를 작성한다.
using UnityEngine;
public class AnimationSpeedExample : MonoBehaviour
{
public float animSpeed = 1.0f;
public Animator animator;
// Update is called once per frame
void Update ()
{
animator.SetFloat("AttackSpeed", animSpeed);
}
}
위의 과정을 끝내고나면 Animator.SetFloat()을 통해 원하는 parameter의 값을 조정해 주는 것만으로 원하는 애니메이션의 속도를 조절할 수 있게 된다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Unity3D > Animation' 카테고리의 다른 글
[Unity3D] Animation - 2D 스프라이트 시퀀스 애니메이션 (1) | 2017.07.19 |
---|---|
[Unity3D] Animation - 오브젝트 풀링 기법과 유니티 버전업으로 인한 애니메이터 컨트롤러 동작 변경 문제(5.3.5 -> 5.6.0) (0) | 2017.06.23 |
[Unity3D] Animation - 유니티 애니메이션 레이어 사용하기 (3) | 2017.06.20 |
[Unity3D] Animation - 유니티에서 애니메이션 블랜드 사용하기 (2) | 2017.06.07 |
[Unity3D] Animation - Animation Event 사용법 (2) | 2017.05.10 |