유니티 애니메이션 속도 조절 방법

 

 

게임을 제작할 때 개발자는 애니메이션의 속도에 관여해야하는 경우가 자주 발생한다. 대표적인 예시를 들자면 캐릭터의 공격 속도 수치가 변할 수 있는 게임에서 캐릭터의 공격 속도와 공격 애니메이션의 속도를 맞추기 위해 관여하는 것이다. 이러한 두 속도를 세심하게 맞추는데 실패한다면 캐릭터의 공격 애니메이션이 끝나지 않았는데 캐릭터가 이동을 한다던지, 공격 애니메이션과 데미지가 들어가는 타이밍이 다르다던지 하는 상당히 부자연스러운 상황이 발생하게 될 것이다. 이러한 상황은 게임의 타격감이라는 요소를 떨어뜨리는 심각한 문제가 될 수도 있다.

 

그렇게 때문에 적절한 순간에 애니메이션의 속도를 조절하는 방법을 알아둘 필요가 있다. 유니티에서는 애니메이션의 속도를 조절하는 방법을 여러가지 지원하는데 하나씩 알아보도록 하자.

 

 

방법 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의 값을 조정해 주는 것만으로 원하는 애니메이션의 속도를 조절할 수 있게 된다.

 

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts