2025
02.06

 

애니메이션 이벤트

유니티의 애니메이션 이벤트는 함수의 이름을 지정하여 호출하는 방식으로 동작한다.

일반적으로 애니메이션 이벤트는 별도의 코드 할당 없이 사용되며, 이로 인해 인자가 없는 형태로 정의되는 경우가 많다. 

이 경우, 인자가 없는 빈 시그니처의 함수를 만들어 호출하면 된다.

가장 흔히 사용되는 사례는 발소리 사운드 재생이다. 

발이 땅에 닿는 정확한 타이밍에 사운드를 재생해야 하므로, 타이밍을 애니메이션 에셋에서 직접 설정하는 것이 이상적이며, 별도의 인자가 필요하지 않은 경우가 많다.

 

 

문제점

하지만 BlendTree를 사용하여 Idle 모션과 Run 같은 움직임 모션을 블렌딩할 경우, 문제가 발생할 수 있다.
예를 들어, 캐릭터가 멈춰 있는 상태(Idle)에서도 Run 애니메이션의 이벤트가 실행되는 현상이 발생할 수 있다.
이러한 문제를 방지하기 위해 weight 값을 활용한 필터링을 적용하는 것이 좋다.

 

빈 시그니처 함수 대신 AnimationEvent를 인자로 받는 함수를 사용하면 weight 값을 활용하여 이벤트 실행 여부를 제어할 수 있다.

 

코드

public void PlayFootStepSound(AnimationEvent e)
{
    if (e.animatorClipInfo.weight < 0.1f) return;

    SoundManager.Instance.PlaySound(_footStepKey);
}