Animation Event는 애니메이션 도중 특정 타이밍에 함수를 실행할 수 있게 해주는 기능으로 이를 사용하여 애니메이션 도중 특정 타이밍에 스크립트 함수를 실행할 수 있다.
애니메이션 도중 특정 타이밍에 함수를 실행할 수 있게 해주는 기능
Animator 또는 Animation Component가 있는 게임 오브젝트의 메서드를 호출할 수 있다.
주로 공격 판정, 효과음 재생, 이펙트 실행 등의 용도로 활용된다.

위와 같은 화면에서 시간이 적혀있는 바로 아래줄이 애니메이션 이벤트 줄이고 이곳을 우클릭하여 애니메이션 이벤트를 추가, 삭제 할 수있다.
이를 통해 어떤 특정 프레임 지점에서 이벤트를 생성하면 그 시점에 그 이벤트를 유니티 전체에 뿌리게 된다.
어떤 오브젝트의 애니메이션에 이벤트를 추가하게되면

Inspector에서 이런 화면을 보게된다.
함수를 지정할 수 있는 것이 있는데 이때 함수로 지정가능한 것은 Animator 컴포넌트가 있는 해당 게임 오브젝트에서 Animator을 제외한 컴포넌트의 함수만 호출할 수 있다.
그래서 해당 오브젝트에 아래와 같은 스크립트를 만들어 추가해주면
using UnityEngine;
public class CubeEventTest : MonoBehaviour
{
void TestCubeCallback()
{
Debug.Log("Event recieved");
}
}

위와 같이 방금 만든 스크립트에 존재하는 함수가 존재한다.
방금 만든 TestCubeCallback() 함수를 선택해주고 게임을 실행하면

위와 같이 정상적으로 콘솔창에 잘나오는 것을 볼 수 있다.
이러한 과정은 내가 만든 오브젝트에서만이 아니고 기존의 존재하는 애니메이션에서도 사용이 가능하다.

설정하고자 하는 애니메이션의 에셋을 누른 후에 Animation탭에 가면 아래쪽에 event라는 항목이 있는데 여기서 그 애니메이션의 특정 지점에서 이벤트를 뿌릴 수가 있다.
위와 같이 파란색 지점(케릭터의 발이 땅에 닿는 지점)에서 뚜벅뚜벅이라는 로그를 콘솔에 찍고 싶다면 캐릭터에 달려있는 스크립트안에
void OnWalkEvent()
{
Debug.Log("뚜벅뚜벅~~");
}
이러한 함수를 작성해주고

위와 같이 함수에 호출하고자 하는 함수를 작성한 후에 play를 하게된다면

콘솔창에 잘 나오는 모습을 확인할 수 있다.
사진을 보게되면 이벤트에는 float, int, string과 같은 인자들을 받아올 수 있다.
int와 string에 각각 숫자 7과 안녕하세요라는 것을 작성한 후에
void OnWalkEvent(int a)
{
Debug.Log($"뚜벅뚜벅~~{a}");
}
void OnWalkEvent(string str)
{
Debug.Log($"뚜벅뚜벅~~{str}");
}
위와 같이 작성한다면 첫번째 함수는 7인수를 받아 실행될 것이고 두번째 함수는 안녕하세요 인수를 받아 실행될 것이다.
그러나 c#에서는 Unity의 Animation Event 시스템은 오버로딩을 제대로 처리하지 못해 같은 이름의 여러 개의 메서드가 있으면 하나만 실행되어 결국 7이라는 인자만 출력이 되게된다.