반응형
Unity에서 애니메이션 종료 시점 처리하는 방법
Unity에서 애니메이션이 종료될 때 특정 동작을 실행하려면 여러 가지 방법이 있습니다. 대표적인 방법을 정리해 보겠습니다.
1. Animation 이벤트 활용
애니메이션의 특정 프레임에서 이벤트를 호출하는 방식입니다.
using UnityEngine;
public class AnimationEventHandler : MonoBehaviour
{
public void OnAnimationEnd()
{
Debug.Log("애니메이션 종료!");
// 추가 동작 실행
}
}
2. Animator State 이벤트 활용
애니메이션 상태가 종료될 때 자동으로 감지하는 방법입니다.
using UnityEngine;
public class AnimationStateHandler : StateMachineBehaviour
{
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("애니메이션 종료 감지!");
// 추가 동작 실행
}
}
3. 코드에서 직접 애니메이션 종료 감지
애니메이터의 상태 정보를 체크하여 애니메이션 종료를 감지하는 방식입니다.
using UnityEngine;
public class AnimationChecker : MonoBehaviour
{
public Animator animator;
private bool isPlaying = false;
void Update()
{
if (isPlaying && animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
{
isPlaying = false;
Debug.Log("애니메이션 종료!");
// 추가 동작 실행
}
}
public void PlayAnimation(string animationName)
{
animator.Play(animationName);
isPlaying = true;
}
}
4. Coroutine을 이용한 대기 후 실행
애니메이션 길이를 직접 계산하여, 종료 후 실행하는 방식입니다.
using UnityEngine;
using System.Collections;
public class AnimationCoroutine : MonoBehaviour
{
public Animator animator;
public void PlayAnimation(string animationName)
{
StartCoroutine(WaitForAnimation(animationName));
}
private IEnumerator WaitForAnimation(string animationName)
{
animator.Play(animationName);
float length = animator.GetCurrentAnimatorStateInfo(0).length;
yield return new WaitForSeconds(length);
Debug.Log("애니메이션 종료!");
// 추가 동작 실행
}
}
어떤 방법을 선택해야 할까?
방법 | 장점 | 단점 |
---|---|---|
Animation 이벤트 | 직관적, UI에서 설정 가능 | 모든 애니메이션에 일일이 설정해야 함 |
Animator State 이벤트 | 애니메이션 상태별로 감지 가능 | 추가적인 State Machine Behaviour 필요 |
코드에서 직접 감지 | 일반적인 동작 감지 가능 | Update()를 계속 실행해야 함 |
Coroutine 사용 | 특정 애니메이션 길이만큼 대기 가능 | 애니메이션이 변경되면 코드 수정 필요 |
결론
- 애니메이션마다 실행해야 할 동작이 다르면 Animation 이벤트 사용
- 특정 애니메이션 상태에서만 감지하려면 State Machine Behaviour 사용
- 코드에서 전체적으로 관리하려면 Animator 상태 체크 사용
- 일정 시간 후 실행하려면 Coroutine 사용
이 중 Animation 이벤트나 State Machine Behaviour가 가장 권장되는 방법입니다.
상황에 맞는 방식을 선택해서 사용하면 됩니다! 🚀
728x90
반응형
'프로그램 코딩 > 유니티(Unity3d)' 카테고리의 다른 글
[Unity3d] 프리팹 덮어쓰기(엎어치기) 방법 정리 (0) | 2025.02.15 |
---|---|
[Unity3d] 애니메이션 즉시 정지 및 실행하는 방법 (0) | 2025.02.15 |
[Unity3d] public 변수에 설명(툴팁) 추가하는 방법 (0) | 2025.02.15 |
[Unity3D] 2D 프로젝트 메인 카메라 & 캔버스 설정 (0) | 2025.02.09 |