Unity
Unity 애니메이션 이벤트
Russell Developer
2024. 12. 15. 00:17
Unity 애니메이션 이벤트 이해 및 활용하기
Unity의 애니메이션 이벤트(Animation Event)는 특정 애니메이션의 특정 프레임에서 스크립트의 함수를 호출할 수 있는 강력한 기능입니다. 이를 통해 애니메이션과 게임 로직을 동기화하거나, 이벤트를 발생시키는 동작을 정의할 수 있습니다. 이번 포스팅에서는 애니메이션 이벤트의 개념, 사용 방법, 그리고 실제 활용 예제를 다룹니다.
1. 애니메이션 이벤트란?
애니메이션 이벤트는 Animation Clip의 특정 타이밍에 호출되는 스크립트 함수를 설정하는 기능입니다.
이를 통해 다음과 같은 작업을 수행할 수 있습니다:
- 애니메이션 도중 사운드 재생.
- 특정 동작의 콜백 실행.
- 타격 판정 활성화/비활성화.
예:
- 공격 애니메이션의 특정 프레임에서 데미지 판정을 활성화.
- 점프 애니메이션 종료 시 캐릭터 상태를 "땅에 착지"로 변경.
2. 애니메이션 이벤트 설정하기
1) Animation Clip 선택
- Assets 창에서 Animation Clip을 선택합니다.
- Inspector 창에서 애니메이션 프리뷰를 확인합니다.
2) 이벤트 추가
- Animation 창을 엽니다.
- Window > Animation > Animation 메뉴에서 열기.
- 이벤트를 추가할 프레임으로 재생 헤드(빨간 선)를 이동합니다.
- 타임라인 상단의 Add Event 버튼(작은 다이아몬드 아이콘)을 클릭합니다.
- 생성된 이벤트를 선택하면 Inspector 창에 이벤트 정보가 표시됩니다.
3) 함수 설정
- Inspector 창에서 호출할 함수 이름을 입력합니다.
- 함수는 Animator와 연결된 게임 오브젝트의 MonoBehaviour 스크립트에 있어야 합니다.
- 함수 이름을 정확히 일치시켜야 합니다.
3. 스크립트에서 함수 작성
1) 함수 작성
이벤트에 호출할 함수를 스크립트에 작성합니다.
using UnityEngine;
public class AnimationEventExample : MonoBehaviour
{
// 기본 애니메이션 이벤트 함수
public void PlayFootstepSound()
{
Debug.Log("발자국 소리 재생");
}
public void DealDamage()
{
Debug.Log("적에게 데미지!");
}
// 파라미터를 받는 함수
public void CustomEvent(string message)
{
Debug.Log("애니메이션 이벤트 메시지: " + message);
}
}
2) 함수 호출 테스트
- PlayFootstepSound, DealDamage, CustomEvent를 호출하도록 Animation Event에 설정합니다.
- 파라미터가 필요한 경우 Animation Event 설정에서 값도 입력할 수 있습니다.
4. 애니메이션 이벤트 파라미터
애니메이션 이벤트는 다음과 같은 데이터를 함수로 전달할 수 있습니다:
- 정수(int)
- 실수(float)
- 문자열(string)
- 오브젝트(Object)
파라미터를 사용하는 함수 예제
public void PrintMessage(string message)
{
Debug.Log("받은 메시지: " + message);
}
public void AdjustSpeed(float newSpeed)
{
Debug.Log("새로운 속도 설정: " + newSpeed);
}
애니메이션 이벤트를 설정할 때 Inspector 창에서 해당 파라미터 값을 입력할 수 있습니다.
5. 실전 활용 예제
1) 공격 애니메이션에서 타격 판정 활성화
public class PlayerAttack : MonoBehaviour
{
public Collider attackCollider;
// 타격 판정 활성화
public void EnableHitbox()
{
attackCollider.enabled = true;
Debug.Log("타격 판정 활성화!");
}
// 타격 판정 비활성화
public void DisableHitbox()
{
attackCollider.enabled = false;
Debug.Log("타격 판정 비활성화!");
}
}
- Animation Clip에서 공격 시작 프레임에 EnableHitbox() 호출.
- 공격 종료 프레임에 DisableHitbox() 호출.
2) 점프 애니메이션과 착지 이벤트
public class PlayerJump : MonoBehaviour
{
public void OnJumpStart()
{
Debug.Log("점프 시작!");
}
public void OnLanding()
{
Debug.Log("착지 완료!");
}
}
- 점프 시작 시 OnJumpStart() 호출.
- 착지 동작이 끝나는 프레임에 OnLanding() 호출.
6. 애니메이션 이벤트 활용 시 주의 사항
- 함수 이름 정확히 작성
- 함수 이름이 Animation Event에 설정된 이름과 일치해야 합니다.
- 함수는 MonoBehaviour에 작성
- Animator가 있는 게임 오브젝트와 같은 오브젝트에 있어야 합니다.
- 애니메이션 루프 시 중복 호출 주의
- 루프 애니메이션의 경우 이벤트가 계속 반복 호출될 수 있습니다.
- Performance
- 많은 이벤트를 동시에 호출하면 성능에 영향을 줄 수 있습니다. 필요한 최소한의 이벤트만 설정하세요.
7. 요약
Unity의 애니메이션 이벤트는 애니메이션과 게임 로직을 연결하는 강력한 도구입니다.
이를 활용하면 애니메이션의 특정 프레임에서 정확한 동작을 실행할 수 있습니다.
- Animation Clip에서 이벤트를 추가합니다.
- 호출할 함수를 MonoBehaviour에 작성합니다.
- Inspector 창에서 이벤트 설정과 파라미터를 지정합니다.