Unity/Animation
Animation Event 함수 등록 (+발생 가능 에러)
sungmin08
2025. 3. 10. 23:10
애니메이션을 만지다보면 Event 함수를 등록 할 일이 생긴다.
▶ 애니메이션 Event 함수란?
어떤 애니메이션의 특정 프레임에 함수를 호출 시킬 수 있는 것
나는 골렘의 1번의 공격 애니메이션에 피가 깎이게 하고 싶은데 플레이어가 골렘의 손에 닿을 때 피가 깎이도록 코드를 구현 해서 피가 2번 깎이게 됐다.
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player"))
{
PlayerController.instance.ReduceHP(10);
}
}
★ 이럴 때 사용할 수 있는 해결 방법이 Animation Event!
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player"))
{
PlayerController.instance.ReduceHP(10);
canDealDamage = false; // 중복 공격 방지
attackCollider.enabled = false; // 다시 공격할 때까지 Collider 비활성화
}
}
public void AttackHit()
{
canDealDamage = true; // 공격 가능 상태 활성화
attackCollider.enabled = true; // 손 Collider 활성화
}
1. 먼저 골렘이 주먹이 플레이어와 충돌이 되면 피를 깎고 박스콜라이더를 비활성화 시킨다. (이렇게 되면 다음 충돌 때 비활성화되었기 때문에 OnTriggerEnter 함수 실행 X)
2. 공격 애니메이션이 실행 될 때 AttackHit()를 호출하여 다시 활성화하여 한번의 공격을 유효하게 만든다.
3. 원하는 애니메이션 프레임에 이벤트 함수를 등록 한 후 실행시키고 싶은 함수를 Function에 입력한다.
!!주의!! 함수 뒤에 ()를 쓰면 에러가 난다
▶에러 뜨는 이유 : Unity의 Animation Event 시스템은 매개변수가 없는 함수를 찾을 때 단순히 함수명만 입력해야 합니다.
C#에서는 ()가 함수 호출을 의미하지만, Animation Event에서는 함수 이름만 등록하고 Unity가 내부적으로 호출하는 방식이기 때문입니다.